目录
-
全局变量和局部变量
1.全局变量
<1>全局变量:定义在py文件的变量
<2> 全局变量定义在函数外部,可以在函数内部调用
注:如果要在函数内部进行修改,则需要在函数内部声明,通常在def下一行添加 global 变量名
2.局部变量
<1>局部变量:定义在函数中的变量叫做,函数被调用结束后不再生效
<2>在函数外面不能访问到函数内部定义变量
-
引用传递和值传递
1.引用传递
传入的参数对象是可变对象:列表,字典
def change(ls):
ls[-1] = -1
return ls
x = [1,2,3]
print(change(x))
输出结果
2.值传递
传入的参数对象是不可变的对象:数字,元组,字符串
def change(x):
x = 1
return x
a = 2
print(change(a))
-
函数参数(默认值参数、命名参数、可变参数、万能参数)
1.默认值参数
<1>定义:通常在形参的位置定义好的,在传递参数的过程中,若传递该默认值参数,则结果会调用传递时的参数,如不传递,则使用形参中的默认值
<2>例:计算圆的面积,在这之中,Π通常使用3.14,故可将其设置为默认值,程序如下:
def area(r,pi=3.14):
return r*r*pi
# 不传递Pi,则使用默认值
print(area(2))
# 传递时,不再使用默认值
print(area(2,3.14159))
运行结果为:
2.可变参数
<1>定义:如果在定义函数时有多个参数,则可使用*args(args可以是其他字母)表示可变参数,可传递可不传递,结果是元组形式
<2>例:
a.不使用调用过程中传递的可变参数,则以元组形式出现
def show(name,age,*args):
print("我的名字是:",name)
print("我的年龄是:",age)
print(args)
show("hh",12,"羽毛球",190)
b.如果使用可变参数
def show(name,age,*args):
print("我的名字是:",name)
print("我的年龄是:",age)
print("我的爱好是:",args[0])
print("我的身高是:",args[1])
show("hh",12,"羽毛球",190)
-
函数递归
函数自身调用自身叫做函数递归。注:如果递归中没有结束条件,会形成死循环
例如:使用递归求1-100的和
def sum(num):
if num >= 0:
return num + sum(num - 1)
else:
return 0
print(sum(100))
-
匿名函数 -- lambda表达式
即没有名称的函数,用法如下:
def show(a,msg):
a()
print("haha-------",msg)
show(lambda :print("I'm a function"),"hihi")
结果如下
-
偏函数
例如要转换大量的二进制字符串,每次都传入int(x, base=2)
但可以使用functools.partial创建一个偏函数的,简化操作
>>> import functools
>>> new_int = functools.partial(int,base=2)
>>> new_int("101")
5
-
全局函数
函数 | 作用 |
round() | 四舍五入,奇数ok,偶数>5则四舍五入 |
range(10) | 生成0-9之间的所有数,即左闭右开,默认间隔为1 |
range(1,10) | 1-9之间 |
range(1,10,2) | 1-9,步长为2 |
len(a) | 返回容器的个数 |
any([a,b]) | a,b中有一个为真即真 |
all([a,b]) | a,b中都为真即真 |
eval() | 接收多个变量,能去掉字符串,例如: a = eval(input("请输入多个值:")) // 返回结果为元组 a,b,c = eval(input("请输入多个值:")) // 返回结果为单独的值 |
ascii() | 转为字符串 |
abs() | 取绝对值 |
max(),min() | 最大值,最小值 |
bin(),oct(),hex() | 二进制,八进制,十六进制 |