函数简介

  • 定义:就是具有特定功能的一段代码
  • 优点:
  • 解决代码的重复书写
  • 可以将功能的实现者和使用者分开,提高开发效率
  • 分类:
  • 库函数:print、input、abs等
  • 自定义:用户自己封装的函数

函数使用

  • 定义函数格式
    def 函数名([参数列表]):
    函数体
    []表示可选,参数可以有,也可以没有,也可以是多个。
  • 函数名:
  • 与变量一样,只要遵循标识符的命名规范即可。
  • 函数调用:
  • 函数定以后不会执行,需要调用才会执行
  • 调用格式:函数名([参数])

函数分类(参数与返回值)

# 无参无返回值
def print_hello():
    for i in range(10):
        print('Hello world!')

# print_hello()
# 带参数无返回值
def print_n_hello(n):
	for i in range(n):
     	 print('Hello world!')  
   
# print_n_hello(5)

# 带参有返回值
def add(m, n):
	c = m + n
  	# 使用return返回需要返回的值,不返回默认为None
  	return c   

print(add(3, 5))

分类的标准是按照有无参数,以及有无返回值。

函数参数

  • 形参:形式参数,就是写在函数定义处的参数
  • 实参:实际参数,就是在函数调用时传递的参数
  • 位置参数:也叫必传参数,没有默认值的参数
  • 默认参数:定义时有默认值,调用时可以不传,必须写在最后
  • 关键字参数:在函数调用时指定参数名字,参数的位置就无所谓。
  • 可变长度参数:函数调用时可以传递比定义处更多的参数,多出来的参数会保存在args和kwargs中
    def var_len_args(a, b, name=‘goudan’, *args, **kwargs):
    print(a, b)
    print(name)
    # 是一个元组,保存多传的位置参数
    print(args)
    # 是一个字典,保存多传的关键字参数
    print(kwargs)
var_len_args(1, 2, 3, 4, age=10)
  • *的使用:
    def show(a, b):
    print(a, b)
lt = [1, 2]
# 需要从列表根据下标获取元素,然后作为参数传递
# show(lt[0], lt[1])
show(*lt)

def show2(aa=11, bb=22):
 	print(aa, bb)
   
d = {'aa': 123, 'bb': 456}
# show2(aa=d['aa'], bb=d['bb'])
# 上下等价
show2(**d)

函数进阶

  • 函数的定义位置是随意的?
  • 不是,一定是先定义后调用,函数的调用一定要放在定义之后。
  • 函数的名字可以相同吗?
  • 不可以,若出现同名函数,后者会覆盖前者。
  • 函数内部能否再定义函数?
  • 可以,定义在函数内部的函数叫内部函数,它是很多高级功能实现的基础。

变量的作用域

  • 块级作用域
    if True:
    name = ‘ergou’
# 能够在块的外部使用,说明没有块级作用域
print(name)
  • 局部作用域
  • 局部变量:定义在函数内部的变量叫局部变量,只能在函数内部使用。
    def test():
    a = 10
    #不能再函数外部使用,此处会报错
    print(a)
  • 全局作用域
  • 全局变量:定义在函数外部的变量叫全局变量,哪里都可以使用
    num = 10
    def show():
    # 声明使用的时外部的同名变量
    global num
    # 只能使用,不能修改,若想修改需要进行全局声明
    num = 20
    print(num)
    show()
    print(num)
  1. 函数内部可以使用外部变量,但是不能修改
  2. 若修改需要使用global进行全局声明
  3. 当函数内部与外部出现同名变量,默认使用的是内部变量
  • nonlocal使用
  • 说明:内部函数使用外部函数的局部变量,需要使用nonlocal进行声明
    def wai():
    n = 10
    def nei():
    # 声明使用非本地变量,外部函数的局部变量
    nonlocal n
    n = 20
    print(n)
    nei()
    print(n)
    wai()