目录
- 函数的定义
- 函数定义的三种方式
- 空函数
- 有参函数
- 无参函数
- 函数的返回值
- return的特性:
- 函数的三种调用方式
- 函数的参数
- 形参
- 实参
- 可变长参数
- 可变长形参*
- 可变长实参*
函数的定义
函数就是工具, 定义函数方式为
def func(): # def 函数名():
pass # 代码块
函数定义的特性: 函数定义过程, 只检测语法, 不会执行代码, 只有调用时才会执行代码
函数定义的三种方式
空函数
空函数顾名思义就是一个空的函数, 什么代码都没有,它的作用就是占个位置, 在大项目构思整体框架的时候 会用到
def func():
pass #没有代码块时 必须写一个pass
有参函数
定义函数时参数是函数体接收外部传值的一种媒介,其实就是一个变量名
在函数定义阶段括号内有参数,称为有参函数。需要注意的是:定义时有参,意味着调用时也必须传入参数。
如果函数体代码逻辑需要依赖外部传入的值,必须得定义成有参函数。
def guess1(x,y):
"""给定两个数,打印较大的数"""
if x > y:
print(x)
else:
print(y)
guess1(50,20) # 传入参数, 函数调用
无参函数
定义函数时参数是函数体接收外部传值的一种媒介,其实就是一个变量名
在函数阶段括号内没有参数,称为无参函数。需要注意的是:定义时无参,意味着调用时也无需传入参数。
如果函数体代码逻辑不需要依赖外部传入的值,必须得定义成无参函数。
def guess2():
"""给定两个数,打印较大的数"""
x = 30 #直接定义计算的数值
y = 20
if x > y:
print(x)
else:
print(y)
guess2() # 直接调用
函数的返回值
return是函数的返回值,可以拿到函数的最后结果, 然后在函数外进行其他运算
return的特性:
- return是一个函数结束的标志,函数内可以有多个return,只要执行到return,函数就会执行。
- return的返回值可以返回任意数据类型
- return的返回值无个数限制,即可以使用逗号隔开返回多个值
- 0个:返回None 即如果函数没有直接定义, 函数默认返回none
- 1个:返回值是该值本身
- 多个:返回值是元组
函数的三种调用方式
def max_self(x, y):
if x > y:
return x
else:
return y
# 1. 直接调用
print(max_self(1, 2)) #2
# 2. 得到返回结果后 再处理
res = max_self(1, 2) * 12
print(res) #24
# 3. 调用两次函数
print(max_self(max_self(20000, 30000), 40000)) #40000
函数的参数
形参
在函数定义阶段括号内定义的参数, 称之为形式参数 , 简称形参 , 本质就是变量名
位置形参
在函数定义阶段, 按照从左到右的顺序依次定义的形参 , 称之为位置形参
特点 : 按照位置定义的形参 , 都必须被传值 , 不能多一个少一个
默认形参
在定义阶段, 就已经被赋值 在调用的时候 可以不为它传值
def func(x, y=10): # y 就是默认形参
print(x)
print(y)
func(2) # 2传给x 在调用的时候 可以不为y传值
注意:
- 位置形参必须放在默认形参的左边。
- 如果不传值,使用默认值;如果调用的时候传值,使用传入的值
- 默认形参的值只在定义阶段赋值一次,也就是说默认参数的值在函数定义阶段就已经固定了。
- 默认参数的值通常应该是不可变类型。
实参
在函数调用阶段括号内传入的参数 , 称之为实际参数 , 简称实参 , 本质就是变量的值
位置实参
在函数调用阶段 , 按照从左到右的顺序依次定义的实参 , 称之为位置实参
特点 : 按照位置为对应的形参依次传值 , 从左到右传值, 不能多一个也不能少一个
关键字实参
在调用函数时 , 按照key=value的形式为指定的参数传值 , 称之为关键字实参func(num1 = 2 , num2 = 3)
特点 : 可以打破位置 从左到右的限制 , 可以为指定的形参传值
注意:
- 可以混用位置实参和关键字实参,但是位置实参必须在关键字实参的左边。
- 可以混用位置实参和关键字实参,但不能对一个形参重复赋值。
func(x, y=2)
func(y=2, x) # 报错 SyntaxError: positional argument follows keyword argument
func(x, x=1) # 报错 NameError: name 'x' is not defined
可变长参数
可变长形参*
形参中的* 会将溢出的位置实参全部接收 , 存储为元组的形式 , 然后把元组赋值给*后的参数
def sum_self(*args):
res = 0
for num in args:
res += num
return res
res = sum_self(1, 2, 3, 4)
print(res) # 10
可变长实参*
实参中的 * ,* 会将* 后参数的值循环取出,打散成位置实参 , 然后传值给形参。以后但凡碰到实参中带*的,它就是位置实参,应该马上打散成位置实参去看。
def func(x, y, z, *args):
print(x, y, z, args)
func(1, *(1, 2), 3, 4)
# 1 1 2 (3, 4)
原文地址:https://www.cnblogs.com/faye12/p/11549979.html