函数由以下几个部分组成:
定义一个函数:
def showMyName(name): #定义函数
print(name)
showMyName("张三") #调用函数
解释:
什么是返回值?
如:
a=int(4.5)
解释:
def sum(a,b):
return a+b
print( sum(1,2) ) #输出3
解释:
def func1():
return 1,2,3,4 #将返回一个元组
def func1():
print("hello")
def func2():
return func1 #返回一个函数
func2()() #输出hello
函数参数分为形参和实参
形参是一个变量,而形参是一个值
比如:
def sum(a,b):
return a+b
print( sum(1,2) ) #输出3
解释:
def func1(func):
func()
def func2():
print("hello")
func1(func2) #输出:hello
传入可变对象:
def func1(a):
a[0]=100 #原列表将被改变
list1=[1,2,3]
func1(list1) #调用函数
print(list1) #输出[100, 2, 3]
传入不可变对象:
def func1(a):
a=100 #实参不会被改变
b=1
func1(b) #调用函数
print(b) #输出1
解释:
def func1(str):
print("hello")
func1() #无参数,则报错!!!
def func1(a,b,c):
print(a,b,c)
func1(b=2,a=1,c=3) #输出:1 2 3
比如:
f=open("test.txt","r",encoding="UTF-8") #encoding="UTF-8"就使用了关键字参数
调用函数时,如果没有传递参数,则会使用默认参数
def func1(name,age=18):
print(name,age)
func1("张三") #使用默认值,输出:张三 18
func1("张三",20) #覆盖默认值,输出:张三 20
注意:
def func1(age=18,name): #默认参数写在了前面,报错!!!
print(name,age)
加了星号 * 的参数会以元组(tuple)的形式导入
def func1(a,*b):
print(b)
func1(11,22,33) #输出:(22, 33)
加了两个星号 ** 的参数会以字典的形式导入
def func1(a,**b):
print(b)
func1(11,b1=22,b2=33) #输出:{'b1': 22, 'b2': 33}
不定长参数需要写在形参的最后
如:
def function(name,sex='male',*args,**kwargs): #关键参数、默认参数、*args和**kwargs为不定长参数
print("Hello World!")
function("郭飞","男","a","b","c",爱好="拯救宇宙") #函数调用
各参数的值:
name "郭飞"
sex "男"
args ('a', 'b', 'c')
kwargs {'爱好': '拯救宇宙'}
函数内部直接或间接调用函数本身,则该函数称为递归函数。
递归函数的特点:
一定要有结束的逻辑,不然就会无限循环调用自己。
示例-计算阶乘n!
def Leo(n):
sum = 1
if 1 == n: #递归终止条件(结束逻辑)
return 1;
sum = n * Leo(n - 1)
return sum #返回阶乘的总和
num=input("请输入一个数字:")
num=int(num)
print( Leo(num) ) #输出该数的阶乘
解释:
在求X的阶乘时,可以利用递归的思想:把大问题转化成小问题,再把小问题转化成更小的问题,最后得解。
help(time) #打印关于模块time的帮助(需要导入模块)
exit() #退出程序
exit("程序已退出") #退出时输出提示
exit(1) #退出码为1(退出码为0的时候是正常)
isinstance([1,2],list) #判断数据是否为list
type(name) #查看变量的类型
type(a) is list #a为列表则返回True
range(100) #0到99
range(1,100) #1到99
range(1,100,2) #1到99里的奇数(2为步长)
id(a) #查看变量a的地址
chr(65) #将整数转为ASC-II
ord('a') #将一个字符转换为它的整数值 (结果为97)
hex(15) #将一个整数转换为一个十六进制字符串 (结果为0xf)
oct(10) #将一个整数转换为一个八进制字符串 (结果为0o12)
abs(3+4j) #求绝对值 (结果为5.0)
原函数:
def now():
print("2018-01-01") #只输出这一行
now()
原函数结果:
2018-01-01
使用装饰器:
#装饰器
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__ ) # 输出函数名
return func(*args, **kw)
return wrapper
#加装饰器后
@log #相当于now=log(now)
def now():
print('2018-01-01')
#调用函数
now()
使用装饰器的结果:
call now():
2018-01-01
解释: