总结和复习
函数
def f(*args):
total = 0
for val in args:
total += val
return total
# 列表当做参数传入,要把列表中的每个值传入用 *mylist 在列表名上加上*号
mylist = [1, 3, 4, 10, 20]
print(f(*mylist)
作用域 - LEGB (局部,嵌套,全局,内置)变量
a = 100
def f():
gloable a
a = 200
b = 'hello'
def g():
nonlocal b
b = 'good'
递归
- 什么叫做递归 ----函数直接或间接的调用自己
- 怎样实现递归---1.收敛条件:让递归在有限的次数内完成或者回溯,如果递归无法在有限的次数内收敛就可能导致ReoursioneError 2.递归公式 3.例题 求n的阶层的递归函数
def f(n): if n==0 or n ==1: return 1 else: return n * f(n)
例题1
求两个数的最大公约数
def gcd(x,y):
if x < y:
temp = x
x = y
y = temp
while True:
if x % y == 0:
return y
else:
temp = x % y
x =y
y = temp
if __name__ == '__main__':
gcd(25,25)
例题2
求若干数的和 自己定义的参数,随便自己定义多少个 返回所有的参数和
def add(*args):
total = 0
for val in range args:
total += val
return total
模块
- 引入模块代码 import 模块名 as 重命名模块
字符串
---例子 var = "hello word"
访问字符串的值 —— 变量名【下标】
更新字符串 ----变量名【下标】= '新的字符串'
字符串可以加法运算
字符串的函数和方法---见菜鸟教程
例题 生成四位数的随机验证码
import random
def main():
str1='123456789abcdefghijlmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST'
str2 =''
for index in range(4):
x = random.randrange(len(str1))
str2 += str1[x]
return str2
列表
# 创建列表
#1
mylist = [1,2,3,4]
#2
mylist = list(range(10))
#3创建列表生成式
mylist = [x ** 2 for x in range(1,10)]
#4 列表生成器
mylist = (x ** 2 for x in range(1, 10))
# 列表的增加元素
#1.append()该方法没有返回值,但是会修改原来的列表(在列表末尾增加元素)
mylist.append(10)
#2.insert()该方法没有返回值,但是会在列表指定位置插入对象(在列表的指定位置增加元素)
mylist.insert(1, 7)
#3.extend()该方法没有返回值,但会在已经存在的列表中添加新的内容(在列表的末尾添加另外一个列表的值)
mylist.extend(list)
# 列表删除元素
#1.remove()该方法没有返回值(删除你已经知道的元素,列表中有重复的元素,只能删除第一个匹配的元素)
mylist.remove(2)
#2.clear()该方法没有返回值(清空列表)
mylist.clear()
#3.del (删除列表中知道下标的元素)
del mylist[2]
#pop() 该方法返回从列表中移除的元素(默认是删除最后一个元素,带参数是删除指定位置元素)
mylist.pop(1)
# 列表排序
#(python 内置的排序方法默认都是排的升序(从小到大)) 如果希望降序可以通过用reverse参数来指定)
#python 函数几乎都是没有副作用的(调用函数以后不会影响传入的参数)
#1.sorted 函数 该函数返回一个排完序的新列表,不会改变原来的列表(产生一个排完序的新列表)
f2 = sorted(mylist,reverse= True)
#2.sort 方法 该方法没有返回值,但是会改变列表(对列表排序)
mylist.sort()
## 内存管理
内存分为:
栈 ---变量 --地址---对象的引用
堆 --真正的对象
id() 获取地址
is
静态区
元组
元组的定义---tuple = ('apple','hello', 33, 59) 注意: 元组只包含一个元素时,需要在元素后面添加逗号,不然会被当做运算符计算
访问元组 --- 元组名【下标】
遍历元组
tuple = ('hello','lisi') for index in range(len(tuple)): print(tuple[index]) for value in tuple: print(value)
元组和列表的不同: 1.元组和列表的不同是元组是不能修改的,2. 元组在创建时间和占用空间上都优于列表
删除元组 --- del tuple
元组的常用的内置函数和方法 ---- 菜鸟教程
集合
特点: 集合不允许有重复的元素,而且可以进行交集,并集,差集运算,集合内的元素排列是无序的,不能用下标运算
创建集合 --- set1 = {1,2,3,4} set2 = {range(1,10)}
添加元素 --- set1.add(6) set1.update([11,12]) 把列表里的元素追加到集合末尾
删除元素 --- set1.discard(4)(把列表里的4元素删除了)
set1.remove(4)(把列表里的4 元素删除了,没有返回值)
set1.pop()(删除列表里的一个元素,没有参数)
遍历集合 ---
set1 = {1,2,3,5} for value in set1: print(value)
元组和集合的转换 list1 = list(set1)
集合的函数和方法
字典
字典的定义--- dict = {'张三': 78, '李四': 80, '王五': 90}
访问字典 --- 通过键获取字典里的对应的值
print(dict['张三'])对字典进行遍历(遍历的实质是键再通过键取对应的值)
for elem in dict: print('%s\t --->\t%d' %(elem,dict[elem]))
对字典的元素进行更新或添加元素 --- dict['张三']= 60 (更新) --dict['李白']= 70(添加元素) --- dict.update(王麻子= 79,李白=100)
访问字典里的元素 --- dict['张三'] dict.get('张三')
删除字典中的元素 --- dict.popitem() 删除任意的键值对,并作为两个元素返回 dict.pop('张三',78)
面向对象的编程
第一步:
1.定义类:类的首字母要大写
2.什么是类:类是对象的蓝图和模板 有了类就可以创建对象
3.定义类的两件事: 数据抽象 --- 抽取对象共同的静态特征(找名词)- 属性
行为抽象 -- 抽取对象共同的动态特征(找动词)- 方法
4.定义类的关键字 -- class -- 类名(每个单词的首字母大写)
class Student(object):
#这个叫做构造方法(构造器\构造子)
#调用该方法的时候不是使用方法的名字,而是使用类的名字
def __init__(self, _name, _age):
self.name = _name
self.age = age
# 对象的第一个参数都是统一写成self
# self代表的是类的实例,代表当前对象的地址
def study(self,course ):
print('%s正在学习%s' %(self._name,course))
第二步
def main():
# 第二步就是对象的实例化,调用构造方法来创建学生对象, 实际上是调用了__init__方法
stu1 = Student('张三', 23)
第三步
def main():
# 给对象发消息,让对象完成某个工作
stu1.study('数学')