函数是什么
1.函数是对实现某一功能的代码的封装
2.函数可以实现代码的复用,从而减少代码的重复编写
Python 中函数的特性:
1.函数的参数可以是python 中的任意数据类型,并且参数的数量可以是零个或多个。
2.函数也可以通过关键字 return 返回任何数量的 Python 中的任意数据类型,作为结果
函数分类
1.内置函数
为了方便我们的开发,针对一些简单的功能,python解释器已经为我们定义好了的函数即内置函数。
对于内置函数,我们可以拿来就用而无需事先定义,如len(),sum(),max()
2.自定义函数
很明显内置函数所能提供的功能是有限的,这就需要我们自己根据需求,事先定制好我们自己的函数来实现某 种功能,以后,在遇到应用场景时,调用自定义的函数即可。
1)局部变量
local()输出局部变量值
在函数中使用
- 局部使用变量名的时候,查找顺序:局部---》全局---->-内置
2)全局变量
global()输出全局变量值
在函数外使用 - 全局使用变量名时,查找顺序:全局---->内置
形参和实参
什么是形参?顾名思义,形参就是形式上的参数,可以理解为数学的X,没有实际的值,通过别人赋值后才有意义。相当于变量。
什么是实参?顾名思义,实参就是实际意义上的参数,是一个实际存在的参数,可以是字符串或是数字等。
以上面的例子介绍下什么是形参和实参:
1. 形参
对于函数来说,形式参数简称形参,是指在定义函数时,定义的一个变量名;
形参分为:位置参数和默认参数
a. 位置参数
b. 默认参数
默认参数在函数定义的时候,就已经绑定了实际的值了。
调用函数时,可以给其传值,也可以不传。
不传值 就使用定义函数时绑定的值。
传值 就是使用传递的值。
2. 什么是实参
对于函数来说,实际参数简称实参。
是指在调用函数时传入的实际的数据,这会被绑定到函数的形参上;
函数调用时,将值绑定到变量名上,函数调用结束,解除绑定,并且实参将不再存在于程序中。因此,大家要明白,这里的 位置参数 和 关键字参数 是在函数调用的情况下的概念。
a.位置参数传递参数
- 要注意,如果这样传参的话就要对应着你上面设置的变量名传,因为系统时无法识别出那个是name的,它只能按照位置识别。
b.关键字参数传递参数
使用关键字参数传参时,不必考虑形参的位置。但是需要注意,关键字必须和在定义函数时形参一致。
3. 万能参数: *args 和 **kwargs
a. 用 * 表达式接收传进来的任意多个未明确定义的位置参数
def foo(x, y, *args):
print(args)
foo(1, 3, 5, 6)
在函数体内接收到的参数会放在元组中
b. 用 ** 表达式接收传进来的任意多个未明确定义的关键字参数
def func(x, y, **kwargs):
print(kwargs)
func(1, 3, name='shark', age=18)
在函数体内接收到的参数会放在字典中
函数的返回值
如何函数周产生的值如果函数之外要用就要返回值,并用一个变量去接受它 的返回值
没有return,就要一个变量接受它的返回值,就会是none
def f4():
return 1 ,2,‘qf’,[1,2],{'a':1}
r4 = f4()
print (r4)
def foo():
n = 10 + 20
return n #返回值
y = foo() #返回值赋值给y
print(y)
>>>def f2():
... return #返回值为空的时候就不会返回值,放回none空
...
>>> r = f2()
>>> print(type(r),r)
<class 'NoneType'> None
def f3():
n = 1 + 20
r2 = f3() #没有返回值,则r2会赋值为空
print(type(r), r)
========================
def f4():
return 1, 2, 'qf', [1,2], {'a': 1}
r4 = f4() #也就是 r4= (1, 2, 'qf', [1, 2], {'a': 1})
print(r4)
(a1, 2, 'qf', [1, 2], {'a': 1}) #r4是输出一个元组
a,b,c,li,dic = f4() #元组可以进行解包
print(a,b,c,li,dic)
*_, d5 = f4() #*_是表示后面变量匹配完之后剩下的
>>> print(*_,d5)
1 2 qf [1, 2] {'a': 1}
>>> print(*_)
1 2 qf [1, 2]
a, *_, d6 = f4()
>>> def func(arg):
... return arg
...
>>> def f1():
... n = 1+2
...
>>> def f1():
... n = 1+2
... return n
...
>>> f = func(f1)
>>> print(f)
<function f1 at 0x7f5b8a562200>
>>> print(id(f))
140031139652096
>>> print(id(f1))
140031139652096
>>> print(f1)
<function f1 at 0x7f5b8a562200>
>>> n = f()
>>> print(n)
3
>>> type(f1)
<class 'function'>
>>> type(f)
<class 'function'>
什么是局部变量和全局变量
局部变量就是函数内使用的
其他都是全局变量
名称空间和作用域
名称空间是表示变量名是哪儿声明的(定义的)
作用域是变量名可以在哪儿生效 (使用)