在编程中,咱们常常要调用相同或者相似的操做,这些相同或者相似的操做是由同一段代码完成的,而函数的出现,能够帮助咱们避免重复编写这些代码。函数的做用就是把相对独立的某个功能抽象出来,使之成为一个独立的实体。python
Python在全世界被普遍使用的一个缘由,就是Python中有大量的内置函数,这些内置函数能够帮助咱们快速构建各类场景的网站。编程
定义一个函数只要以 "def" 开头便可。函数
定义好函数以后,只表示这个函数封装了一段代码而已,若是不主动调用函数,函数是不会主动执行的。网站
定义函数的格式以下:人工智能
def function_name(arg1, arg2): function body return value
函数名(function_name):和Python中其它的标识符命名规则相同,有效的函数名以字母或下划线开头,后面能够跟字母、数字或下划线,函数命名应以可以反映函数功能为准则;Python中的函数名区分大小写,字母相同但大小写不一样的函数是不一样的。code
函数参数(arg1, arg2):调用一个函数时能够传递的数据,分为形参和实参;参数能够有一个或多个,也能够没有。对象
函数体(function body):任何有效的代码均可以出如今函数体中,函数体中的代码须要缩进四个空格。内存
函数返回值(return value):函数执行完成后返回的值;也能够不返回任何内容,不返回内容可视为返回 "None" 。作用域
print('定义函数') def say_hello(name): print('hello', name) say_hello('python') # hello python say_hello('人工智能') # hello 人工智能 say_hello(1024) # hello 1024
定义函数 hello python hello 人工智能 hello 1024
对于设置参数的函数,当调用函数时须要向函数传递参数,被传入的参数称为实参,而函数定义时的参数称为形参。io
Python中函数的参数能够分红必须参数、关键字参数、默认参数、可变参数和组合参数。
必须参数,顾名思义就是函数定义的参数在调用时必须传入,而且在调用时传入的参数的数量和顺序必须和定义时的参数保持一致。
print('必须参数') def two_arg_function(arg1, arg2): print('第一个参数', arg1) print('第二个参数', arg2) two_arg_function(10, '咱们') # 传入的参数数量不能多也不能少,不然会报错
必须参数 第一个参数 10 第二个参数 咱们
使用关键字参数能够不按函数定义时的参数的顺序来调用函数,Python解释器可以根据函数定义时的参数名来匹配参数。
print('关键字参数') def key_arg_function(name, age): print('姓名:', name) print('年龄:', age) key_arg_function(name='张三', age=18) # 按顺序传递参数 key_arg_function(age=20, name='李四') # 不按顺序传递参数
关键字参数 姓名: 张三 年龄: 18 姓名: 李四 年龄: 20
在定义函数时咱们能够给参数添加默认值,若是调用函数时没有传入参数,函数就会使用默认值。
注意,默认参数必须定义在参数列表的最后,在默认参数以后不能再定义必须参数,不然会报错。
print('默认参数') def default_arg_function(name, age=18): print('姓名:', name) print('年龄:', age) default_arg_function(name='阿飞', age=25) # 给参数age赋予一个值 default_arg_function('小米') # 使用age的默认值18
默认参数 姓名: 阿飞 年龄: 25 姓名: 小米 年龄: 18
在某些状况下,咱们不能在定义函数的时候就肯定参数的数量和内容,这时候就可使用可变参数。
可变参数在声明时不会命名。
可变参数的格式以下:
some_function(*args, **kwargs): function body
print('*args') def variable_arg(*args): print(args) variable_arg() variable_arg(1, 2) variable_arg('Hello 人工智能') # '*args'参数获取到的是一个元组 print('---------') print('**kwargs') def variable_kwarg(**kwargs): print(kwargs) variable_kwarg() variable_kwarg(name='人工智能') # '**kwargs'参数获取到的是一个字典,因此在调用函数时必须使用关键字参数的方式来传递参数
*args () (1, 2) ('Hello 人工智能',) --------- **kwargs {} {'name': '人工智能'}
被赋值的变量不是在哪里均可以使用的,如何定义变量决定了变量能够在哪里被使用。
Python中变量赋值的位置决定了哪些范围的对象能够访问这个变量,这个范围就被称为做用域。
Python中有两种最基本的变量做用域:局部变量和全局变量。
通常状况下,在函数内赋值的变量,不作特殊声明的都是局部变量。
局部变量的做用域是局部的,在当前函数赋值则只能在当前函数使用。
函数定义时的参数也是局部变量,只能在函数体内被访问,超出函数体就不能正常执行。
print('局部变量') def local_variable1(): x = 'hello' print(x) # 此句代码若是写在函数体外,则会报错,由于这里的x定义在函数体内,是局部变量 local_variable1() def local_variable2(x): print(x) # 此句代码若是写在函数体外,同样会报错,由于参数也是局部变量 local_variable2(10)
局部变量 hello 10
在函数外赋值的变量就是全局变量,全局变量能够在整个程序范围内被访问。
函数体内的从新赋值的相同变量名,并不会改变函数体外的全局变量;由于在函数体内定义一个相同的变量名,实际上是建立了一个新的变量,只是名字与函数体外的相同。
若是要在函数体内对全局变量进行修改,必定要使用 "global" 关键字。
print('全局变量') x = 'Hello Python' def global_variable1(): print(x) # 这里输出的是全局变量x的值 global_variable1() def global_variable2(): x = 10 print(x) # 这里输出的是函数体内的局部变量x的值 global_variable2() def global_variable3(): global x x = 'Hi 人工智能' print(x) global_variable3() print(x) # 验证全局变量的值是否改变
全局变量 Hello Python 10 Hi 人工智能 Hi 人工智能
想要获取函数中的局部变量,可使用 "return" 关键字返回。
函数没有return,赋值会获得 "None" ;函数有return但没有返回值,赋值也会获得 "None" ;函数既有return又有返回值,就能够经过赋值的方式获取函数的返回值。
Python中函数的返回值能够返回不止一个值;有多个返回结果时,Python会返回一个元组。
print('返回值') def ret(): x = '局部变量' return x # 返回x的值 result = ret() print(result) print('---------') def no_return(): print('没有return') def no_return_value(): print('有return没有返回值') return def has_return(): print('有return有返回值') x = 'has return value' return x result1 = no_return() print(result1) # 输出None result2 = no_return_value() print(result2) # 输出None result3 = has_return() print(result3) # 输出has return value print('---------') print('多个返回值') def multi_return_value(): r1 = '第一个返回值' r2 = '第二个返回值' r3 = '第三个返回值' return r1, r2, r3 result = multi_return_value() print(result)
返回值 局部变量 --------- 没有return None 有return没有返回值 None 有return有返回值 has return value --------- 多个返回值 ('第一个返回值', '第二个返回值', '第三个返回值')
Lambda表达式也称做匿名函数。一般在须要一个函数、但又不想费神去命名它的时候,就可使用匿名函数。
Lambda表达式的格式以下:
lambda 参数名:返回值
以 "lambda" 开头,表示这个是lambda表达式;以后的内容由 ":" 分为两部分, ":" 左边的是函数的参数, ":" 右边的是要返回的值;lambda表达式不须要用 "return" 关键字返回内容,函数会默认返回 ":" 右边的值。
lambda表达式能够赋值给变量。
lambda表达式通常在两种状况下使用:
(1)程序只执行一次,不须要定义函数名,使用lambda表达式方便定义,而且节省了内存中变量的定义;
(2)在某些函数中必须以函数做为参数,可是函数自己十分简单并且只在一处使用。
print('lambda表达式') f = lambda x, y: x + y # x, y为参数;x + y为返回值 z = f(1, 2) # 传递两个实参 print(z)
lambda表达式 3