一、函数定义语法:
def 函数名(形参列表):
语句块
二、函数定义规则
1. 函数的名字就是语句块的名称
2. 函数名的命名规则与变量名相同(函数名必须是标识符)
3. 函数名是一个变量(不要轻易对其赋值)
4. 函数有自己的名字空间,在函数外部不可以访问函数内部的变量,在函数内可以访问函数外部的变量,但不能修改此变量。
5. 函数如果不需要传入参数,形参列表可以为空
6. 语句块部分,内容不能为空,如果为空需要填充pass
三、形参定义方式
形参:函数调用时,接收调用时传递的数据
【1】位置形参
【2】关键字形参
【3】缺省参数
def 函数名(形参名=默认实参1, 形参名2=默认实参2, ...):
pass
缺省参数必须自右至左依次存在,如果一个参数是缺省参数,则其右侧的所有参数都必须是缺省参数。
【4】*args
星号元组形参,收集多余的位置传参
def 函数名(*元组形参名):
pass
【5】**kwargs
双星号字典形参,收集多余的关键字传参
def 函数名(**字典形参名):
pass
【6】不定长形参
星号元组形参,双星号字典形参
可以接受任意的位置传参和关键字传参
def fun(*args,**kwargs):
pass
位置形参,缺省参数,星号元组形参,双星号字典形参可以混合使用.
函数形参自左至右的顺序为:
位置形参
星号元组形参
命名关键字形参
双星号字典形参
四、函数调用
函数名(实参)
注:
1. 函数调用是一个表达式
2. 如果函数内部没有return语句,函数调用完毕后返回None对象
3. 如果函数需要返回其它的对象需要用到 return 语句
4.函数名是一个变量,绑定的是函数对象
六、函数调用时参数的传递形式
【1】位置传参
实参和形参的位置对应,将实参数据传递给函数形参。
实参和形参按位置一一对应。
实参个数和形参个数必须一致。
【2】序列传参
位置传参的一种。
用 * 将序列拆解后按位置进行传递的传参方式
【3】关键字传参
按形参的名称将实参数据传递给形参。
实参和形参按形参名称匹配。
【4】字典关键字传参
实参为字典,将字典用 ‘**‘ 拆解后再进行关键字传参的传参方式。
字典的键名必须和形参一致,切数量相同。
字典的键必须为字符串。
七、全局变量与局部变量
【1】全局变量
① 定义在函数外部,模块内部的变量称为全局变量
② 全局变量所有函数都可以直接访问(但函数内不能将其直接赋值)
【2】局部变量
① 定义在函数内部的变量称为局部变量(函数的形参也是局部变量)
② 局部变量只能在函数内部使用
③ 局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁
八、函数的功能性
① 一个函数可以作为另一个函数调用时的实参,传递给此函数
def f1():
print("f1被调用")
def f2():
print("f2被调用")
def fx(fn):
print(fn)
fn() # 此时这是调用什么呢?
fx(f1)
fx(f2)
#结果
<function f1 at 0x7f7a52ed6f28>
f1被调用
<function f2 at 0x7f7a51757c80>
f2被调用
#---------------------
def goodbye(L):
for x in L:
print("再见:", x)
def hello(L):
for x in L:
print("你好:", x)
def operator(fn, L):
fn(L)
operator(hello, [‘Tom‘, ‘Jerry‘, ‘Spike‘])
#结果
你好: Tom
你好: Jerry
你好: Spike
② 一个函数可以作为另一个函数的返回值
def fx():
return max
fn = fx()
print(fn([1, 3, 5, 7]))
#结果
7
③ 函数可以嵌套
九、函数式编程
用一系列函数解决问题。
优点:
【1】用每一个函数完成细小的功能,一系列函数的任意组合可以完成大问题
【2】函数仅接受输入并产生输入,不包含任何能影响输出的内部状态
要求:
def 语句创建的函数最好不要访问局部作用域以外的变量,这样可以保证返回结果的唯一性(可重入性)
十、函数的 可重入性(结果唯一性)
如果一个函数的输入参数一定,则返回结果必须一定的函数称为可重入函数
【1】 可重入函数,传入参数一定.结果必然一定
def myadd(x, y):
return x + y
【2】不可重入函数:
y = 200
def myadd2(x):
return x + y
print(myadd2(10)) # 210
y = 300
print(myadd2(10)) # 310
原文:https://www.cnblogs.com/longyuu/p/14154697.html