巨人的肩膀,函数
函数由以下几个部分组成
def 函数名称(参数):
在缩进块里面编写函数体,用return返回值
函数一旦执行到return是就会结束这个函数
类型属于对象,变量是没有类型的
如果没有return语句在函数执行完毕后会返回结果为None
def p(str):
print(str,end=' ')
print('a god boy')
x='hi'
p(x)
>>>hi
a god boy
缺省参数,在定义参数时如果有定义好的参数,那么在调用参数时这些被设定好的参数就会被当成默认值
ps:默认参数务必指向不变对象!
def p(str='emmmm'):
print(str,end=' ')
print('a god boy')
p()
>>>emmmm a god boy
如果无法确认将会输入具体多个参数,可以使用*
加在参数前面表示,在被调用时这些被输入的参数会自动组装成一个元组
当你打算输入一个列表或者元组时,在调用输入参数时在列表/元组的名称前加一个*
就可以数例输入参数
def f(*n):
for p in n:
print (p,end=' ')
f(10,2,3)
>>>10 2 3
如果你写了一个函数def1
并保存在了abstest.py
文件,在该文件目录下启动解释器
那么你可以通过
form abstest inport ads1
来导入函数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
def p(str):
print(str,end=' ')
print('a god boy')
x='hi'
p(x)
print(str)
>>>hi a god boy
<class 'str'>
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
def p(str1,str2):
print(str1,end=' ')
print('a god boy, and',str2)
x='hi'
y='my friend'
p(str2=y,str1=x)
>>hi a god boy, and my friend
命名参数,可以不按顺序直接对参数赋值。
def p(str1,str2):
print(str1,end=' ')
print('a god boy, and',str2)
p(str2='hi',str1='my friend')
>>hi a god boy, and my friend
变量在函数中是有作用范围的,分为局部变量和全局变量
访问权限决定于这个变量在哪里赋值。
定义在函数内部的变量拥有局部作用域,该变量称为局部变量。
定义在函数外部的变量拥有全局作用域,该变量称为全局变量。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
如果想在函数内部修改外部变量,可以用global
和nonlocal
x='hi'
def p():
global x
print(x,end=' ')
x='a god boy'
print(x)
p()
>>>hi a god boy
lambda函数
lambda函数,即匿名函数。即,不再使用def语句定义的函数。
而且,lambda函数实际上是一个表达式,函数体比def简单。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
lambda 函数没有所谓的函数名 (function_header),这也是它为什么叫匿名函数。
sumary=lambda a,b: a+b
print(sumary(25,55))
>>>80