函数:实现了一些功能的代码集合
如何定义一个函数:
def 函数名():
函数体
函数名() #调用函数
例: 求和的函数:
def sum(参数):
num = 0
for i in range(参数)
num += i
return num #这是返回给调用者的一个结果
print(num) #这是函数体内输出的,外面调用的看不见,也使用不了这个值
函数的生命周期: 调用的时候到 函数执行完毕,完毕之后就销毁了
根据用户的需求来确定求和范围(传参)
def sum(a):
num = 0
for i in range(a+1):
num += i
return num
aa = sum(50)
print(aa)
传入多个参数的时候,会按照位置一一对应
全局变量和局部变量:
函数中一般都是局部变量,只能在函数中使用
在函数外面的就是全局变量,只要定义了,后面都可以使用
函数中如果使用全局变量,在前面添加global(如果定义了,在函数里修改变量会修改全局变量的值)
总结:函数的语法
传参
全局,局部变量
将函数导入其他模块使用
传参: 可变类型和不可变类型
不可变类型:
创建一个数字5,然后让变量指向5
修改变量的值,就是重新创建了一个对象,然后让变量指向了新的对象
a = 5 b = 5
a,b的id是一样的
可变数据类型:
指的是里面的数据是可变的
修改数据之后,数据id不会变
首先:在内存中创建了一个对象10,然后将var1指向10
然后:当变量var1作为参数传入函数的时候,形参就是指向var1指向的位置10
如果在函数中需要修改参数,那么就是创建新的对象,然后修改形参的指向
注意:将可变数据类型传入函数后,如果对其修改后会将源数据修改
相当于操作了一个全局变量
参数: 必须参数 关键字参数 默认值参数 不定长参数
1.必须参数: 必须传参,而且参数的位置和数据类型要求是一一对应的
缺点:必须传参 参数个数一个都不能少 位置要一一对应
2.关键字参数: 位置可以不用一一对应,但是还是不可以少传
3.默认值参数: 形参直接赋值,实参依然可以传入,覆盖形参的值
实参可以少传,或者不传,或者使用关键字改变顺序传
4.不定长参数:
*加名字:接收多余的参数
匿名函数: lambda
匿名函数后面的表达式会自动return一个值
注意:匿名函数只能返回一个表达式,如果需要返回多个表达式的值,需要将他添加到:集合/列表/元组中
迭代器: iter() next()
li = [1,8,9,5,4]
创建一个可迭代的对象:
i_li = iter(li)
next(i_li) 取值:一个一个的取出来,可以记住上一次取值的位置
print(next(i_li))
print(next(i_li))
print(next(i_li))
多维列表:
li = [3,5,8,7,[3,5,8,[3,5,8,7,6,4],7,6,4],6,4]
输出第三个集合中的7:
print(li[4][3][3])
数据类型的转换:
不能转换成字典dict