Skip to content

函数

  • 对某一特定的功能或者代码块进行封装,在需要使用该功能的时候直接调用即可

定义函数

  • 格式
python
def 函数名(参数列表):
  # 函数体
  return 返回值1,返回值2...
  • 示例
python
def func1(a,b):
  return a+b

函数参数

参数分类

  • 形参:
    • 函数定义时,函数名后面括号中的参数
  • 实参:
    • 函数调用时,函数名后面括号中的参数

传参方式

  • 固定参数
    • 定义函数时就已确定参数个数
python
# 定义函数
def func1(a,b):
  return a+b
# 调用函数
print(func1(1,2)) # 3
  • 关键字参数
    • 使用关键字参数可以不按照参数的顺序传入参数,而是使用参数名来指定参数值。
    • 混合使用时,位置参数必须在关键字参数之前
python
def func1(name, age, gender):
  print(name, age, gender)

# 关键字参数
func1(name = "张三", age = 19, gender = "男")

# 混合使用,位置参数必前面
func1("张三", age = 19, gender = "男")
  • 可变参数
    • 定义函数时,参数名前加一个星号*
    • 调用函数时,参数名前加一个星号*
    • 可变参数可以接收任意数量的参数,包括零个参数
python
def func1(*args):
  return sum(args)
args = [1,2,3,4,5]
print(func1(*args)) # 15
  • 可变关键字参数
    • 定义函数时,参数名前加一个星号**
    • 调用函数时,参数名前加一个星号**
    • 可变参数可以接收任意数量的参数,包括零个参数
python
def func1(**kwargs):
  return sum(kwargs.values())
print(func1(a=1,b=2,c=3)) # 6

参数默认值

  • 定义函数时,参数名后加一个等号和默认值
  • 调用函数时,不传入参数时,使用默认值
  • 调用函数时,传入参数时,使用传入的值
python
def func1(a=1,b=2):
  return a+b
print(func1()) # 3
print(func1(1,2)) # 3

注意事项

  • 参数顺序:位置参数>*args>默认值>**kwargs

函数返回值

  • 函数return语句返回值
  • 函数没有return语句时,默认返回 None
  • 函数可以返回多个值,以元组的形式返回
  • 函数返回值可以使用变量接收
python
def func1():
  print("func1")  # 没有返回值,会返回None
print(func1()) # None

def func2():
  return "func2"  # 返回一个参数,会以字符串的形式返回
print(func2()) # func2

def func3():
  return {"name":"func4"}  # 返回一个字典
print(func3())

def func4():
  return "func3","test"  # 返回多个参数,会以元祖的形式返回
print(func4()) # ('func3', 'test')

def func5():
  return 1,2
a,b = func5()  # 可以将返回的多个参数分别赋值给多个变量
print(a,b)

变量作用域

  • 全局变量

    • 定义在函数外部的变量
    • 函数内部可以使用
    • 函数外部也可以使用
  • 局部变量

    • 定义在函数内部的变量
    • 函数内部可以使用
    • 函数外部不能使用
python
total = 0  # 全局变量
def sum5(a,b):
  sm = arg1 + arg2 # sm在这里是局部变量,外部不可使用
  return sm
print(sum5(1,2))  # 3

作用域关键字

  • global关键字
    • 作用:在函数内部使用global关键字来引入外部的全局变量
    • 注意:
      • 引入全局变量后,函数内部可以使用全局变量
      • 引入全局变量后,函数内部可以修改全局变量
python
total = 0  # 全局变量
def sum5(a,b):
  global total  # 引入外部全局变量
  total = a+b
  return total
print(sum5(1,2))  # 3
print(total)  # 3
  • nonlocal关键字
    • 在函数内部使用nonlocal关键字是向上一层一层查找非全局变量,并引入
python
a = 0
def func1():
  a = 1
  def func2():
    a = 2
    def func3():
      nonlocal a  # 向上一层一层的查找变量a,找到a就停止,立马引入。使该层的变量a 在下层可以访问修改
      a = 3
      print("func3:", a)  # 3
    func3()
    print("func3:", a)  # 3
  func2()
  print("func2:", a)  # 1
func1()

函数嵌套

函数可以多层嵌套。

python
def func1():
  print("func1")
  def func2():
    print("func2")
  func2()
func1()