首页 > 代码库 > python基础之函数内容介绍

python基础之函数内容介绍

一.函数
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。

1.函数定义
def 函数名(参数)
......
函数体
......
返回值

a.使用def关键字创建函数
b.函数名,def后面紧跟着的是函数名,每个函数都需要有个函数名
c.函数参数,分无参函数和有参数函数(下面详解)
d.函数体,实现函数功能的语句组合
e.返回值,返回函数执行结果数据给函数调用者

2.函数的使用
函数在定义完后是不执行函数体的,当python解释在读到def定义的函数名时,在内存中开辟一块空间把函数放进去,函数名作为变量明指向该内存空间,函数在调用的时候才执行函数体。在执行函数体时,一旦执行到return语句,函数执行过程立即终止(即使函数体中还有未执行的语句)返回值给调用函数,如果函数体中没有return语句,默认返回None给调用函数。


3.函数的参数
函数分为无参函数和有参函数;函数在定义的时候如果有参数统一称为形式参数,调用函数时传递的参数称为实际参数


3.1 普通参数


函数定义了几个参数,在调用的时候就需要传递几个参数(形参中有默认值的除外),传多或传少了在执行的时候会报错,传递实参时默认是和形参一一对应的。

#普通参数
def send(f1,f2): #定义了2个形参
#函数体
print(f1,f2)
return True

em=input(‘请输入邮件地址:‘)
result=send(em,‘hello‘) # 需要传递2个实参
if result == True:
print(‘发送成功‘)
else:
print(‘发送失败‘)

3.2 默认参数

形参中参数有默认值的参数,如果设置了默认参数,那么默认参数必须放到参数列表的最后面;调用的时候位置参数在前,关键字参数要在后面。

#默认参数,调用的时候可以不用传递值,也可以从新传递值
def send(f1,f2,XX=‘OK‘): #位置参数要在关键字参数前面,默认参数在调用的时候可以传参也可以不传

#函数体

print(f1,f2,XX)

return True

em=input(‘请输入邮件地址:‘)

result=send(em,‘hello‘) #传递2个实参,不改变默认参数的值

re=send(em,‘hel‘,‘NO‘) #传递3个实参,改变默认参数的值

if result == True and re == True:

print(‘发送成功‘)

else:

print(‘发送失败‘)


3.3 指定参数

#指定参数

def send(f1,f2,XX=‘OK‘):

#函数体

print(f1,f2,XX)

return True

em=input(‘请输入邮件地址:‘)

re=send(f1=em,f2=‘hel‘,XX=‘NO‘) #调用的时候指定参数值,参数名要和形参里一致(顺序到不必一致)

if re == True:

print(‘发送成功‘)

else:

print(‘发送失败‘)


3.4 动态参数
3.4.1 参数前面有一个*的参数

如果在形参前加一个*那么它就是元祖,可以接收任意个实际参数(形参前面加一个*号,在调用的时候该加*的形参可以接收传递的任意个实参,而不报错);如果在调用的时候传递的实参前面也有个*,那么就是把该实参里每个元素循环取出作为元素赋值给函数的形参,如果调用的时候前面不加*就是把该元祖实参作为一个子元祖传递给形参。

def func(*args):

print args

# 执行方式一

func(11,33,4,4454,5)

# 执行方式二

li = [11,2,2,3,3,4,54]

func(*li)


3.4.2 两个*的参数

两个**的参数,是字典, 如果在形参前加两个**那么它就是字典;调用的时候需要指定k和v,那么参数调用只能以指定参数来调用或传递的实参前面也有2个*(这个实参必须是字典),那么就 是把该实参赋值给函数的形参,如:

def func(**kwargs):

print args

# 执行方式一

func(name=‘wupeiqi‘,age=18)

# 执行方式二

li = {‘name‘:‘wupeiqi‘, age:18, ‘gender‘:‘male‘}

func(**li)

 

3.4.3 万能参数
def fname(*args,**kwargs) #只能一个*的在前面,2个*的在后面

print(args)

print(kwargs)

fname(11,22,33,k1=‘v1‘,k2=‘v2‘)

 

3.5 用动态参数实现format功能
format的函数形式是: format(*args,**kwargs)

1)位置参数

fstr=‘I am is {0},my age is {1}‘ #这里的0和1代表第几个参数

print(fstr.format(‘alex‘,22))

li=(‘alex‘,33)

print(fstr.format(*li))

2)变量参数

fstr2=‘I am is {name},my age is {age}‘

print(fstr2.format(name=‘pwj‘,age=21))

ld={‘name‘:‘sindy‘,‘age‘:18}

print(fstr2.format(**ld))


4.全局变量

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
全局变量,默认用大写变量名
对全局变量进行重新赋值,需要先global

name=‘wpj‘ #全局变量

age=22

def f1():

global age #先global,再重新赋值

age=22 #x修改全局变量,前面加global

name=‘alex‘ #这是局部变量,只在该函数里生效,优先使用自己的

print(name)

def f2():

print(name) #引用的是全局变量

f1()

f2()

 

5.三元运算
是if ..else ..的简写,
res= 1 if True else 2,如果if后面的条件为True那么res=1,否则res=2


6.lambda表达式(匿名函数)
匿名函数,lambda后面冒号前面跟的是参数(可以多个),冒号后面跟的是函数体(一句)隐含了return功能, 例如:f2=lambda a1,a2:a1+a2+100

 

7.常用内置函数的介绍
abs() #取绝对值

all(迭代对象) #一个为假,结果为假,all([11,22,33,0])结果为False

any(迭代对象) #,一个为真,结果为真,any((22,(),0)) 结果为True

bin() #把十进制转换成二进制,print(bin(5)) #结果:0b101

oct() #把十进制转换成八进制,print(oct(9)) #结果:0o11

hex() #把十进制转换成十六进制,print(hex(14)) #结果0xe

ascii()#自动执行对象的__repr__方法

callable() #判断对象是否是可调用对象

 

 

 

 

 

 

 


python基础之函数内容介绍