函数的返回值:

可以返回任意类型

没有return的话返回:None

return返回一次就终止函数的运行

函数的使用:

必须先定义,然后再调用

函数的定义:跟变量定义相似,如果没有事先定义就调用的话相当于在引用一个不存在的变量名

python 返回大数据集 None_Code

python 返回大数据集 None_python 数据类型函数_02

#定义阶段#def foo():#print('from foo')#bar()#

#def bar():#print('from bar')#

##调用阶段#foo()

#定义阶段:只检测语法,不执行代码#def func():#if 1>2#print('hahahahahahah')

def func(): #语法没问题,逻辑有问题,引用一个不存在的变量名

View Code

函数参数:

实参与形参(实际传入的参数叫做实参)

位置参数:按照从左到右的顺序依次定义的参数

python 返回大数据集 None_Code

python 返回大数据集 None_python 数据类型函数_02

deffoo(x,y):print(x)print(y)#按位置定义的形参,必须被传值,多一个不行,少一个也不行,按位置对应传入

foo(1,2)

View Code

关键字参数:实参在定义时,按照key=value形式定义

python 返回大数据集 None_Code

python 返回大数据集 None_python 数据类型函数_02

deffoo(x,y):print(x)print(y)

foo(y=10,x=1)

foo(y=10,x=1) #关键字参数可以不用像位置实参一样与形参一一对应,需要指名道姓地传值

View Code

注意:

问题一:位置实参必须在关键字实参的前面

问题二:实参的形式既可以用位置实参又可以是关键字实参,但是一个形参不能重复传值

默认参数:在定义函数阶段,就已经为形参赋值,定义阶段有值,调用阶段可以不用传值

python 返回大数据集 None_Code

python 返回大数据集 None_python 数据类型函数_02

def func(x,y=10): #形参中给了默认值,实参中可以不用传值,那么会按照默认值运行

print(x) #传值的话就会按传入的值运行

print(y)

func(1,20)

func(1)

View Code

#形参的应用:值经常变化的需要定义成位置形参,

# 值大多数情况下都一样,需要定义成默认参数

默认参数注意问题:

一、默认参数需要注意的问题一:必须放在位置形参后面

二、默认参数需要注意的问题二:默认参数通常要定义成不可变类型

三、默认参数需要注意的问题三:默认参数只在定义阶段被赋值一次

可变长参数: 可变长指的是实参的个数不固定

#按位置定义的可变长度的实参:*

#按关键字定义的可变长度的实参:**

python 返回大数据集 None_Code

python 返回大数据集 None_python 数据类型函数_02

def func(x,y,*args): #x=1,y=2,args=(3,4,5,6)#*号接收x,y以外的参数,以元组的形式赋值给args
print(x,y)print(args)
func(1,2,3,4,5,6)def func(x,y,*args): #args=(3,4,5,6)
print(x,y)print(args)
func(1,2,*(3,4,5,6)) #*号后拆开即为foo(1,2,3,4,5,6)
deffunc(x,y,z):print(x,y,z)
func(1,*(2,3)) #func(1,2,3)#同上
func(*(2,3)) #func(2,3)
def func(x,y,**kwargs): #x=1,y=2,kwargs={'a':1,'b':3,'z':3}#**用来接收关键字参数,并以字典形式赋值给kwargs
print(x,y)print(kwargs)
func(1,y=2,z=3,a=1,b=3)#关键字参数必须放在位置参数后
def func(x,y,**kwargs): #x=1,y=2,**kwargs=**{'a':1,'b':3,'z':3}
print(x,y)print(kwargs)
func(1,y=2,**{'a':1,'b':3,'z':3}) #**拆开即为func(1,y=2,z=3,b=3,a=1)
def func(x,y=1,z=1):print(x,y,z)
func(**{'y':2,'x':1,'z':3}) #
def wrapper(*args,**kwargs): #可以接受任意形式,任意长度的参数
print(args)print(kwargs)
wrapper(1,2,3,3,3,3,3,x=1,y=2,z=3)
View Code

命名关键字参数:定义在*后的形参,这类形参,必须被传值,而且要求实参必须是以关键字的形式来传值

函数的嵌套使用:

定义:

def f1():
def f2():
def f3():
print('from f3')
print('from f2')
f3()
print('from f1')
f2()
# print(f1)
f1()
defmax2(x,y):if x >y:returnxelse:returnydefmax4(a,b,c,d):
res1=max2(a,b) #23
res2=max2(res1,c) #23
res3=max2(res2,d) #31
returnres3print(max4(11,23,-7,31))
View Code

函数是第一类对象: 指的是函数可以被当做数据传递

python 返回大数据集 None_Code

python 返回大数据集 None_python 数据类型函数_02

deffunc():print('from func')#可被引用
f=func#可以当做函数的参数
deffunc():print('from func')deffoo(x):print(x)
x()
foo(func)#可以当做函数的返回值
deffoo():print('from foo')defbar():returnfoo
f=bar()print(f)print(foo)
x=0deff1():
x=1
deff2():#x=2
print(x)returnf2
f=f1()#print(f)
f()#可以当做容器类型的元素
defselect():print('select function')
func_dic={'select':select,
}#print(func_dic['select'])#func_dic['select']()
#
#def select():#print('select func')#
#def delete():#print('delete func')#
#def change():#print('change func')#
#def add():#print('add func')#
#
#while 1:#cmd=input('>>: ').strip()#if not cmd:continue#if cmd == 'select':#select()#elif cmd == 'delete':#delete()#elif cmd == 'change':#change()#elif cmd == 'add':#add()#else:#print('无效的命令')
View Code

名称空间:存放名字与值的绑定关系

名称空间分为三种

内置名称空间:python解释器自带的名字,python解释器启动就会生成

全局名称空间:文件级别定义的名字都会存放与全局名称空间,执行python文件时会产生

局部名称空间:定义在函数内部的名字,局部名称空间只有在调用函数时才会生效,函数调用结束则失效

三者的加载顺序:内置名称空间->全局名称空间->局部名称空间

取值:局部名称空间->全局名称空间->内置名称空间

作用域:作用范围

全局作用域:内置名称空间与全局名称空间的名字属于全局范围,

在整个文件的任意位置都能被引用,全局有效

局部作用域:局部名称空间的名字属于局部范围,

只在函数内部可以被引用,局部有效