官方提供的函数叫内置函数(Built-in Functions,BIF)。
def 函数名(参数列表):
函数体
return 返回值
总的来说,大概是这样子
def student(name,gender,school='北京大学',*score):
print(name,gender,school,*score) ==> 如果score前面不带*号,就是把后面的参数打包成元组
student('张三','男') ==> 张三 男 北京大学
student('张三','女','深圳大学') ==> 张三 女 深圳大学
student('张三','女','深圳大学',90,80,70) ==> 张三 女 深圳大学 90 80 70
# score不带星号的结果
student('张三','女','深圳大学',90,80,70) ==> 张三 女 深圳大学 (90, 80, 70)
还有一个可变参数 前面是两个星号 **,输入的参数会被打包成字典
def student(**info):
for i,j in info.items():
print(i,j)
student(name='张三',age='33')
=============result=============
以下是结果:
name 张三
age 33
有些函数只是为了过程,起到处理的作用,就没必要有return
def show_info(sep=':',**info):
for k,v in info.items():
print(k,sep,v)
return ==> 函数只是为了打印,此处return可省略
show_info(name='jack',age='22')
result = show_info(name='jack',age='22')
print(result) ==> 返回None
=============result=============
name : jack
age : 22
name : jack
age : 22
None
有些函数会返回多个值,这时是以元组的形式返回
def add_sub(a,b):
return a+b,a-b
x,y = add_sub(3,4)
print(x,y)
=============result=============
7 -1
这里有全局变量和局部变量的概念,简单说,在外面的是全局变量,在函数里的是局部变量,函数里需要的变量没有会从外一层一层的找。
x = 1
y = 2 ⇒ x, y 为全局变量
def a():
x = 10
z = 3 ==> 函数里 ,x,z 为局部变量
print(x,y,z) ==> 函数里没有变量y,往外找y
def b():
print(x,y,z) ==> 函数里没有 x,y,z,往外找,直到全局变量
b()
a()
=============result=============
10 2 3
10 2 3
为了省内存,我们会使用yield代替return返回数据,返回的是一个可迭代的,生成器对象,大家对比以下代码
def alist():
n = []
for i in range(5):
n.append(i)
return n
print(alist())
——————————————————————————————————————————————————————————————————————
def blist():
for i in range(5):
yield i
print(blist())
print(list(blist()))
=============result=============
[0, 1, 2, 3, 4]
<generator object blist at 0x00000124BDB5A9A8>
[0, 1, 2, 3, 4]
我们可以这么理解return和yield,我们在淘宝买了好多好多包裹,return是把函数要返回的结果一次性返回,就是把包裹一次性送到你家了,把你家(内存)塞得满满的。yield是把所有包裹放在仓库里,你需要时调用一下,一件包裹到你家,再调用一下,第二件包裹到你家。。。只要你没调用,包裹还在仓库里,你家(内存)也不会被塞满。
就是函数里再定义函数,这里注意的是全局变量和局部变量。
global 可以把函数内部的变量定义为全局变量
x = 10
def print_value():
x = 100
print(x)
def pb():
global x ==> 定义了全局变量,这时x = 5
x = 5
print(x)
pb()
print_value()
print(x)
=============result=============
100
5
5
add = lambda x,y: x+y
print(add(2,3))
=============result=============
5