python中def是一个可执行语句,用来定义一个函数。当解释器执行def语句时,其会在内存中创建一个函数对象,除此之外,还会创建一个该函数对应的本地命名空间。这里需要注意的有两点:1 该命名空间是在执行def语句时就已经创建的,而不是在函数调用时; 2 这个命名空间中有包含哪些变量。
对于2点,取决于函数签名已经函数类型。如果函数具有默认参数,那么该命名空间会包含默认参数变量,此外,如果该函数还是一个闭包,那么该命名空间还包含了外层函数的自由变量(即在外层函数定义,但是在内层函数中引用的变量)。
由于在执行def语句时,其命名空间就已经创建,而不是在调用时创建,且后续调用时,无论多少次调用,每次调用函数生成的多个命名空间是共享这些变量(即默认参数以及自由变量)的,而不是每次调用重新定义这些变量,因为这些变量的定义在执行def语句(即定义函数时)就定义好了。因此,如果默认参数或者自由变量是可变对象,那么如果函数中有对这些对象做原地的修改,则这个修改会对所有的调用都起作用。
看下面第一个例子。下面这个例子中,默认参数a是可变对象,且函数中对a进行了原地修改,根据上述的分析,后面每次调用f1,a并不会重新定义,而是在上次调用的基础上进一步进行修改更新a的值。
def f1(a=[1]):
a.append(1)
print(a)
f1() # output --> [1,1]
f1() # output --> [1,1,1]
f1() # output --> [1,1,1,1]
再看下面的第二个例子。下面这个例子中,inner函数是一个闭包,其引用了外层函数的变量a,因此a作为自由变量会在inner函数的本地命名空间中。根据上述分析,多次调用f1,会对a的值不断更新;但是如果重新执行定义inner的def语句,就会重新创建一次inner的初始命名空间,所以其中的初始变量也会重新定义,因此调用f2不会在f1的基础上更新a的值,而是同样的在上一次f2调用的基础上更新a的值。
def outer():
a = []
def inner():
a.append(1)
print(a)
return inner
f1 = outer()
f2 = outer()
f1() # output --> [1]
f1() # output --> [1,1]
f1() # output --> [1,1,1]
f2() # output --> [1]
f2() # output --> [1,1]
f2() # output --> [1,1,1]
函数是类似于可封装的程序片段。允许你给一块
语句
一个名字,允许您在你的程序的任何地方使用指定的名字运行任何次数。
python
中有许多内置函数,如len和range。
函数概念可能是任何有价值软件中最重要的块(在任何编程语言中)。
二、定义函数使用
def
关键字
在这个关键字之后是标识函数的名字;
其次是在一对括号中可以附上一些变量名;
最后在行的末尾...
-
Python
使用
def
开始函数定义,紧接着是函数名,括号内部为函数的参数,内部为函数的 具体功能实现代码,如果想要函数有返回值, 在 expressions 中的逻辑代码中用 return 返回。
1
def
function():
2 print(‘This is a function’)
3 a = 1+2
4 print(a)
上面我们定义...
def
定义了一个模块的变量,或者说是类的变量。它本身是一个函数对象。属于对象的函数,就是对象的属性。
def
func(): return 2print func() # 1func = 5print func # 5print func() # 错误!函数对象已经被覆盖了
在同一模块里,函数在未被定义前是不能使用的,因为它是在“运行时”定义的:print func() # 错误!函数未...
函数的定义
1.逻辑上:能够完成特定功能的独立的代码块。
2.物理上:能够接收数据【也可以不接收数据】,能够对接收的数据进行处理【也可以不对数据进行处理】,能够将数据处理的结果返【也可以没有返回值】。
3.函数定义的本质:详细描述函数之所以能够实现某个特定功能的具体方法。
返回值类型 函数名(形式参数列表)
**返回值类型:**用户需要函数返回的数据类型。
**函数名:**代表的是函数的入口地址。
**形式参数列表:**就是用户将函数外部数据传入函数内部的 局部变量。
**函数体
函数代码块以
def
关键词开头,后接函数标识符名称和圆括号 ()
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行
语句
可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达...
其中,arguments是函数的参数,可以是多个。函数体内可以包含多条
语句
,它们一起完成函数的功能。在函数体内部,可以使用return
语句
来返回函数的结果。
例如,如果我们要定义一个函数,用来计算两个数之和,可以这样写:
def
add(a,b):
c = a + b
return c
我们可以调用这个函数,并传入参数来进行测试,例如:
print(add(3,4)) # 输出 7