概述
作为新手自学Python的第九天,技术低微,希望可以通过这种方式督促自己学习。
个人学习环境:python3.9,PyCharm 2021.3.2 (Community Edition)
———————————————————————————————————————————
函数就是执行特定任务和完成特定功能的一段代码
为什么需要函数
复用代码
隐藏实现细节
提高可维护性
提高可读性便于调试
1、函数的创建和调用
1.1 函数的创建:
def 函数名 ([输入参数]):
函数体
[return xxx]
def calc(a, b):
c = a + b
return c
1.2 函数的调用:
函数名 ([实际参数])
result = calc(10, 20)
print(result)
2、函数的参数传递
函数调用的参数传递
位置实参:根据形参对应的位置进行实参传递
def cale(a, b): # a, b称为形式参数,简称形参,形参的位置出现在函数的定义处
c = a + b
return c
result = cale(10, 20) # 10, 20称为实际参数的值,简称实参,实参的位置出现在函数的调用出
print(result)
关键字实参:根据形参名称进行实参传递
res = cale(b=10, a=20) # = 左侧的变量的名称称为关键字参数
print(res)
3、函数的返回值
函数返回多个值时,结果为元组
def fun(num):
odd = [] # 存奇数
even = [] # 存偶数
for i in num:
if i%2: # 判断余数是否为0,python中0的布尔值为False,非0的布尔值为True
odd.append(i) # i%2为True时,将i存入odd[]
else:
even.append(i) # i%2为False时,将i存入even[]
return odd, even
print(fun([10, 29, 34, 23, 44, 53, 55]))
"""
结果为:
([29, 23, 53, 55], [10, 34, 44])
"""
函数的返回值:
(1)如果函数没有返回值(即函数执行完毕不需要给调用处提供数据),return可以省略
(2)函数的返回值是1个,直接返回类型
(3)函数的返回值是多个,则返回的结果为元组
4、函数的参数定义
4.1 函数定义默认值参数
函数定义时给形参设置默认值,只有与默认值不符的时候才需要传递实参
def fun(a, b=10):
print(a, b)
fun(100) # 100 10
fun(20, 30) # 20 30
4.2 个数可变的位置参数
定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
使用*定义个数可变的位置形参
结果是一个元组
def fun(*args):
print(args)
fun(10)
fun(10, 20, 30)
"""
结果为:
(10,)
(10, 20, 30)
"""
可变的位置参数只能是1个
4.3 个数可变的关键字形参
定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
使用**定义个数可变的关键字形参
结果为一个字典
def fun(**args):
print(args)
fun(a=10)
fun(a=10, b=20, c=30)
"""
结果为:
{'a': 10}
{'a': 10, 'b': 20, 'c': 30}
"""
可变的关键字参数只能是1个
在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求个数可变的位置形参放在个数可变的关键字形参之前
def fun(a, b, c): # a, b, c在函数的定义处,是形式参数
print('a=', a)
print('b=', b)
print('c=', c)
fun(10, 20, 30) # 位置参数
lst = [11, 22, 33]
print('-------------')
fun(*lst) # 在函数调用时将列表中的每个元素都转换为位置实参传入
print('-------------')
fun(a=100, c=300, b=200) # 关键字参数
print('-------------')
dic = {'a': 111, 'b': 222, 'c': 333}
fun(**dic) # 在函数调用时,将字典的键值对都转换为关键字实参传入
print('-------------')
"""
结果为:
a= 10
b= 20
c= 30
-------------
a= 11
b= 22
c= 33
-------------
a= 100
b= 200
c= 300
-------------
a= 111
b= 222
c= 333
-------------
"""
需求:c,d只能采用关键字实参传递
def fun4(a, b, *, c, d): # 从*之后的参数在调用时,只能采用关键字传递
print('a=', a)
print('b=', b)
print('c=', c)
print('d=', d)
# fun4(10, 20, 30, 40) 位置实参传递,此时c,d参数传递不合规
fun4(a=19, b=29, c=39, d=49) # 关键字实参传递
fun4(18, 28, c=38, d=48) # 前两个是位置实参,后两个是关键字实参
"""
结果为:
a= 19
b= 29
c= 39
d= 49
a= 18
b= 28
c= 38
d= 48
"""
函数定义时的形参的顺序问题
def fun5(a, b, *, c, d, **args):
pass
def fun6(*args, **args2):
pass
def fun7(a, b=10, *args, **args2):
pass
5、变量的作用域
作用域:程序代码能访问的该变量的区域
根据变量的有效范围可分为:
(1)局部变量:在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,实际上为全局变量
(2)全局变量:函数体外定义的变量,作用于函数内外
def fun(a, b):
c = a + b # c为局部变量,a、b为形参,作用范围也是函数内部,相当于局部变量
print(c)
name = '萨贝尔' # name的作用范围为函数内外部皆可 ——> 全局变量
print(name)
def fun2():
print(name)
fun2()
def fun3():
global age # 局部变量使用global声明,实际上为全局变量
age = 20
print(age)
fun3()
print(age)
global声明方式只能在函数内使用
最后
以上就是紧张纸鹤为你收集整理的Python自学第九天——函数的全部内容,希望文章能够帮你解决Python自学第九天——函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复