函数
引子
求和:
def sumall(a,b):
sum=0
for i in range(a,b):
sum+=i
print(sum)
def sum_of(a,b):
result=0
for i in range(a,b):
result +=i
return result
sumall(1,15)
print(sum_of(1,15))
函数的定义
声明函数的一般形式:
def funtion_name(agr1,arg2,…,argn):
‘’’ statements’’’
fun_statements
return Value
函数的调用
函数的文档说明
函数参数
- 不传递参数
- 参数函数
- 顺序
函数返回值
函数参数种类
形参和实参
- 形参和实参
- 形参
- 只有在调用时才分配内存单元,调用结束后,即释放所分配的内存单元,因此形参只在函数内部有效,函数调用结束返回主调用函数后紫萼不能再使用该形参变量
- 形参
关键字参数
def user_manage(name,age,job,hobby="Trip"):
print("用户管理系统".center(16,'-'))
print('\tName:\t',name)
print('\tAge:\t',age)
print('\tJob:\t', job)
print('\tHobby:\t', hobby)
print("用户管理系统".center(16, '-'))
user_manage('david',21,'xiha')
默认值参数,关键字参数,必须放置于位置参数之后
不定参数
在python中不定参数主要是指*args和- **kwargs两个魔法变量
他们俩主要是用于函数定义,我们可以将不定数量的参数传递给一个函数
-
args 用来接收 任意非键值对的任意数量的
-
传递形式(,,,)
-
传递进来的参数将以元组的形式存储
# def uncertain_para(para,*agrs): # print('普通位置参数:',para) # print('不定参数',agrs) # print(type(agrs)) # uncertain_para('s',1,23,4)
-
-
**kwags
-
传递形式(a=1,b=2,c=3)
-
传递进来的参数以字典形式存储
-
def un_para_key(**kwargs):
print(kwargs)
print(type(kwargs))
un_para_key(a=1,b=2,c=3)
函数引用
函数属性
函数属性是python中另外一个使用了句点属性标识并拥有名字空间的领域
内嵌函数
作用域
bar() 整个函数都处于外部foo()函数的作用域里(foo()使我们可以从外部访问的一个对象区域)。除了在foo()内部,其他地方无法对bar()进行调用。
作用域的类型
python中,使用一个变量时并不要求需要预先声明他,但在真正使用的时候,它必须绑定到某个内存对象(被定义赋值),这种变量名的绑定将在当前作用域引入新变量,同时屏蔽外层作用域中的同名变量。
搜索作用域的优先级:局部作用域>嵌套作用域>全局作用域>内置作用域
个变量时并不要求需要预先声明他,但在真正使用的时候,它必须绑定到某个内存对象(被定义赋值),这种变量名的绑定将在当前作用域引入新变量,同时屏蔽外层作用域中的同名变量。
搜索作用域的优先级:局部作用域>嵌套作用域>全局作用域>内置作用域
全局变量和局部变量
局部变量:包含在def关键字定义的语句块中,即在函数中定义的变量。每当函数被调用时都会创建一个新的局部作用域。Python中也有递归,即自己调用自己,每次调用都会创建一个新的局部命名空间。在函数内部的变量声明,除非特别的声明为全局变量,否则均默认为局部变量。有些情况需要在函数内部定义全局变量,这时可以使用global关键字来声明变量的作用域为全局。局部变量域就像一个 栈,仅仅是暂时的存在,依赖创建该局部作用域的函数是否处于活动的状态。所以,一般建议尽量少定义全局变量,因为全局变量在模块文件运行的过程中会一直存在,占用内存空间。
注意:如果需要在函数内部对全局变量赋值,需要在函数内部通过global语句声明该变量为全局变量。