#函数与函数式编程
函数定义:
# -*- coding:utf-8 -*-
#函数
#这是一个功能实现函数,func1和func2分别调用这个功能
def fun():
with open('a.txt','ab') as f:
f.write('end action')
def func1():
fun()
"""The function definitions"""
print("in the func1")
return 0
#过程(没有返回值的函数)
def func2():
fun()
"""test1"""
print("in the func2")
'''
x=func1()
y=func2()
print("from func1 return %s"%x) #输出0
print("from func2 return %s"%y) #输出NONE
'''
func1()
func2()
#①定义的功能函数优化了每个函数即将进行的代码量
②并且可以扩展功能
当有代码复用时,可以尝试将它定义为一个函数并在相应位置调用即可!
如增加系统时间def fun():
time_format="%Y-%m-%d %X" #定义日期格式
time_current=time.strftime(time_format) #按规定的日期格式传入当前系统日期
with open('a.txt','a+') as f:
f.write('%s end action\n' %time_current)
-------------------------------
有参函数
# Author:barry allen
# -*-coding:utf-8 -*-
def test(x,y):
print(x)
print(y)
test(1,2) #若不显示调用,则与形参一一对应
test(y=2,x=1) #形参的顺序可以在传入参数的时候自定义,即关键字和位置参数之间的关系(即关键字顺序可以自定义)
test(3,y=2) #此方式也可以,但是还是按照前两种方式更好!注意,关键字参数不能放到位置参数前面!如有三个参数,如1,2,z=3可以,而1,z=3,6则不行
---默认参数
def test(x,y=2):
print (x)
print (y)
test(1) #若不显示调用,则按默认参数的值传参,即默认参数非必传参数
test(1,3)
test(1,y=3) #此时传入参数的值为3
#用途:1.默认安装值 2.数据库默认连接,如Mysql的端口3306
--------参数组
#参数组用于实参个数不固定,默认为列表传参,输出为元组
def test(*args): #*为功能符号,为不固定个数的时候可以定义
print(args)
test(1,2,3,4,5)
test(*[1,2,3,4,5])
def test1(x,*args):
print(x)
print(args)
test(1,2,3) #此时可以传入多个参数
#注意!*args只能接收位置参数,转为元组,不能接受关键字参数传参,区别于**kwargs
---------字典
#**kwargs把关键字参数转换为字典的方式
def test2(**kwargs): #字典传参的标准格式
print(kwargs)
print(kwargs['name']) #输出指定的字典的key值
print(kwargs['age'])
test2(name='lin',age=8,sex='f') #等号左边为字典的key,等号右边为字典的values
test2(**{'name':'lin','age':8})
#注意!形参可以有位置参数,默认参数,字典
#注意!**kwargs接收关键字参数,转为字典形式,区别于*args
#函数返回值return
1.若将函数语句放置return后,则此函数语句不起任何作用
2.可以定义x=test(),此时x为return 的返回值
①无定义返回: 输出返回NONE
②return 0: 输出返回0
③return 1,'a',['1','2'],{'d':'d'}:输出返回相应的返回值
即:
一:无返回值,默认为NONE
二:返回值数=1,返回相应的返回值
三:返回值数>1,返回以元组的形式存放相应的返回值
返回值的作用:根据该函数的返回值结果进行相应的操作