目录
扫描二维码关注公众号,回复:
14740878 查看本文章
一、函数基础(基中基)
函数是具有独立功能的代码块,整合到一个整体并命名,在需要的位置调用即可
代码重用
1.定义函数
def 函数名(参数):
代码1
代码2
.....
2.调用函数
函数名(参数)
3.函数的参数
# example
def add(a, b):
result = a + b
print(result)
add(1, 2)
4.函数的返回值
def subject():
return 'sweet'
needs = subject()
print(needs) # sweet
5.函数的说明文档
控制台输出:函数具体细则说明
5.1定义函数的说明文档
def 函数名(参数):
'''说明文档的位置'''
代码
.....
5.2查看函数说明文档
help(要查找的函数名)
6.函数嵌套调用
函数中调用函数
'''
----------
----------
----------
----------
'''
def line():
print('-' * 10)
def lines(num):
i = 0
while i < num:
line()
i += 1
lines(4)
二、函数进阶
1.变量作用域
变量生效的范围:局部变量+全局变量
1.1局部变量
定义在函数体内部的变量,只在函数体内部生效
作用:在函数体内部 临时保存数据,当函数调用完成时,销毁局部变量。
1.2全局变量
在函数体内、外都生效的变量
定义在函数定义前
- 修改全局变量
a = 100 # 全局变量
print(a) # 100
def textA():
print(a) # 100
def textB():
a = 200
print(a) # 200 → 此时的a是局部变量
textA()
textB()
print(a) # 100
用global关键字 —— 声明a是全局变量,即可修改
a = 100 # 全局变量
print(a) # 100
def textA():
print(a) # 100
def textB():
# global 关键字声明a是全局变量
global a
a = 200 # → 此时的全局变量a被修改
print(a) # 200
textA()
textB()
print(a) # 200
2.函数返回多个值
return a, b ,返回多个数据时,默认是元组类型
def return_num():
return 1,2
print(return_num()) # (1, 2)
3.函数参数(详)
3.1位置参数
函数调用时根据函数定义的参数位置来传递参数
def id(name, age, gender):
print(f'姓名:{name},年龄:{age},性别:{gender}')
id('Justin', 25, 'man') # 姓名:Justin,年龄:25,性别:man
注:传递和定义的参数的顺序及个数必须一致,否则报错
3.2关键字参数
函数调用,通过“键=值”的形式指定。此时顺序不会影响赋值。
def id(name, age, gender):
print(f'姓名:{name},年龄:{age},性别:{gender}')
id('Justin', age = 25, gender = 'man') # 姓名:Justin,年龄:25,性别:man
id('Justin', gender = 'man', age = 25) # 姓名:Justin,年龄:25,性别:man
注:如果有位置参数,位置参数必须写在关键字参数前面(未使用“键=值”形式的参数)
3.3缺省参数(默认参数)
用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值
def id(name, age, gender = 'woman'):
print(f'姓名:{name},年龄:{age},性别:{gender}')
id('Justin', 25, 'man') # 姓名:Justin,年龄:25,性别:man
id('Tom', age = 20, gender = 'man') # 姓名:Tom,年龄:20,性别:man
id('Lucy', 19) # 姓名:Lucy,年龄:19,性别:woman
注:所有位置参数必须出现在默认参数前,包括函数的定义和调用
3.4不定长参数(可变参数)→ 一个组包的过程
不确定调用时会传递多少个参数(也可能无参)。
此时用包裹(packing)位置参数,或包裹关键字参数,进行参数传递。
- 包裹位置传递
def info(*args):
print(args)
info() # ()
info('Lucy') # ('Lucy',)
info('Lucy', 19) # ('Lucy', 19)
注:接收所有位置参数,所有传入的数据会被合并为一个元组(tuple)
- 包裹关键字传递
def info(**kwargs):
print(kwargs)
info() # {}
info(name = 'Lucy') # {'name': 'Lucy'}
info(name = 'Lucy', age = 19, gender = 'woman') # {'name': 'Lucy', 'age': 19, 'gender': 'woman'}
注:收集所有关键字参数,返回一个字典
4.拆包和交换变量值
4.1拆包
- 拆包:元组
def num():
return 100, 200
num1, num2 = num()
print(num1) # 100
print(num2) # 200
- 拆包:字典
dict = {'name' : 'Tom', 'age' : 19}
# dict有两个键值对,拆包时用两个变量接收数据
na, ag = dict
# 对字典拆包,取出的是字典的key
print(na) # name
print(ag) # age
print(dict[na]) # Tom
print(dict[ag]) # 19
4.2交换变量值(swap)
- 法一:定义中间变量
# a=10,b=20 换成 a=20,b=10
a = 10
b = 20
c = a
a = b
b = c
print(a) # 20
print(b) # 10
- 法二:
# a=1,b=2 换成 a=2,b=1
a, b = 1, 2 # a=1,b=2
a, b = b, a
print(a) # 2
print(b) # 1
5.引用
用id( )来判断两个变量是否为同一个值的引用
id:该块内存的地址标识
- int类型——不可变类型
a = 1
b = a
print(a) # 1
print(b) # 1
a = 2
print(b) # 1
- 列表——可变类型
aa = [10, 20]
bb = aa
print(bb) # [10, 20]
aa.append(30)
print(bb) # [10, 20, 30]
5.1引用当实参
不可变类型、可变类型都可以当实参
可变类型VS不可变类型
可变类型
- 列表
- 字典
- 集合
不可变类型
- 整型
- 浮点型
- 字符串
- 元组