函数
函数名其实就是指向一个函数对象的引用
1. 函数关键字
1、函数名必须以下划线或者字母开头,可以包含数字、字母、下划线等组合,不可以包含标点符号!
2、函数名称不能一样,如果一样那么后面的函数定义覆盖前面的定义
3、函数名如果一样,但是大小写不一样,是可以的,算作两个不同的函数
4、函数名能不能使用保留字,同样会将内置函数覆盖掉
2. 函数的定义
函数定义规则:
1、函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
2、任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数
3、函数内容以冒号起始,并且缩进。
4、return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
5、函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
3. 函数的调用
-
调用的语句需要放在定义的后面
-
参数类型应与调用方式一致,最好在调用前检查参数的调用形式
4. 函数参数与作用域
函数参数
- 1、位置参数
调用函数时,传入的两个值按照位置顺序依次赋给参数 - 2、默认参数
位置参数定义后,调用函数是必须传入,否则会出错,默认参数可以避免这一情况,调用函数时,默认参数的值如果没有传入,则被认为是默认值。
定义默认参数要牢记一点:默认参数必须指向不变对象! - 3、可变参数
- 可变参数就是传入的参数个数是可变的
- 定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数
- 调用:
1、直接传参
2、Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
- 4、关键字参数
- 定义:在参数前面加了一个*号
- 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
- 可以传入不受限制的关键字参数。如果要限制关键字参数的名字,就可以用命名关键字参数。
- 调用:
1、直接传参
2、 和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去:
- 定义:在参数前面加了一个*号
- 5、命名关键字参数
- 定义: 命名关键字参数需要一个特殊分隔符*,后面的参数被视为命名关键字参数。如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符了。
def person(name, age, *args, city, job): print(name, age, args, city, job)
- 调用:
命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错
- 6、在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
变量作用域
-
作用域:
-
一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里定义的。定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
-
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,有同名的内部变量和外部变量,它们将被视为两个变量,函数中局部变量优先于全局变量。
5.函数返回值
-
函数体内部可以用return随时返回函数结果;
-
函数执行完毕也没有return语句时,自动return None。
-
多个返回值
返回值是一个tuple!但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。