目录
1.1 定义函数
1.2 函数参数
1.3 函数返回值
1.4 函数变量作用域
1.5 生成器
1.6 嵌套函数
1.7 函数式编程基础
1.1定义函数
官方提供的函数叫内置函数(Built-in Functions,BIF)。
def 函数名(参数列表):
函数体
return 返回值
1.2 函数参数
总的来说,大概是这样子
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
1.3 函数返回值
有些函数只是为了过程,起到处理的作用,就没必要有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
1.4 函数变量作用域
这里有全局变量和局部变量的概念,简单说,在外面的是全局变量,在函数里的是局部变量,函数里需要的变量没有会从外一层一层的找。
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
### ```
1.5 生成器
为了省内存,我们会使用yield代替return返回数据,返回的是一个可迭代的,生成器对象,大家对比以下代码
def alist():
n = []
for i in range(5):
n.append(i)
return nprint(alist())
——————————————————————————————————————————————————————————————————————
def blist():
for i in range(5):
yield iprint(blist())
print(list(blist()))
=result=
[0, 1, 2, 3, 4]
<generator object blist at 0x00000124BDB5A9A8>[0, 1, 2, 3, 4]
我们可以这么理解return和yield,我们在淘宝买了好多好多包裹,return是把函数要返回的结果一次性返回,就是把包裹一次性送到你家了,把你家(内存)塞得满满的。yield是把所有包裹放在仓库里,你需要时调用一下,一件包裹到你家,再调用一下,第二件包裹到你家。。。只要你没调用,包裹还在仓库里,你家(内存)也不会被塞满。
### 1.6 嵌套函数
就是函数里再定义函数,这里注意的是全局变量和局部变量。
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
### 1.7 函数式编程基础
lambda表达式:lambda 是匿名函数,就是懒得给函数起名字了,反正只想达到很简单的目的, 不用又括号,又缩进又return什么的
add = lambda x,y: x+y
print(add(2,3))
=result=
5
三大基础函数:过滤、映射、聚合
- filter(func,iterrable): 通过判断函数,进行筛选
- map(func,iterable):将元素转换成函数需要的形式
- reduce(func,iterable):将元素按一定算法积累计算,最后输出一个数据
这三个函数都差不多,只是reduce需要从 functools 里导入。
本文转自SDK社区:[http://www.sdk.cn](http://www.sdk.cn)