python 学习之路(函数与函数式编程)

函数的定义

函数是逻辑结构化和过程化的一种编程方式:
与过程的区别是函数有返回值,过程没有返回值

# 函数
def func1():
    '''测试函数'''
    print('函数')
    return 0
# 过程
def func2():
    '''测试过程'''
    print('过程')

好处是:
1. 代码可以重复利用。
2. 方法容易扩展。
3. 程序容易维护。

函数的返回值

说明:返回值可以是任意的类型

def test1():
    pass
def test2():
    return 0
def test3():
    return 1,"你好",{"a":"b"},[1,2,3,4]

a1 = test1()
a2 = test2()
a3 = test3()

print('test1 打印的是 返回数%s , 返回值%s' %(type(a1),a1))
print('test2 打印的是 返回数%s , 返回值%s' %(type(a2),a2))
print('test3 打印的是 返回数%s , 返回值%s' %(type(a3),a3))

#打印结果为:
#test1 打印的是 返回数<class 'NoneType'> , 返回值None
#test1 打印的是 返回数<class 'int'> , 返回值0
#test1 打印的是 返回数<class 'tuple'> , 返回值(1, '你好', {'a': 'b'}, [1, 2, 3, 4])

有参数的函数

正常参数

def youcanfunc(x,y):
    print(x)
    print(y)

youcanfunc(1,2) # 按照顺序传值 位置参数调用
youcanfunc(y = 1,x = 2) # 关键字调用

默认参数

def youcanfunc(x,y = 2): # 包含一个默认参数
    print(x)
    print(y)
youcanfunc(1) #可以给y传值,也可以不传,如果传的话,按照传的值走。

参数组

def groupfunc(*args): # 参数多少不固定
    print(args)
groupfunc(1,2,3,4) # 两种传参方式 
groupfunc(*[1,2,3,4,5])
# 返回结果会是元组形式
# (1, 2, 3, 4)
# (1, 2, 3, 4, 5)

参数为字典

def func(**kwargs):
    print(kwargs)

func(name = "tianrun",age = 20)
func(**{'name' : "tianrun",'age' : 20})
# 打印结果:{'name': 'tianrun', 'age': 20}

全局变量与局部变量

name = 'tianrun' # 全局变量
def func(x):
    name = 'tt' # 局部变量
    print(x , name)
func(name)
print(name)
# 打印:
# tianrun tt
# tianrun
# 说明:可以证明函数里面的name 和外面的name 没有影响
# 如果想要在函数里面更改全局变量用 global 修饰

name = 'tianrun'
def func(x):
    global name
    name = 'tt'
    print(x , name)
func(name)
print(name)
# 打印:
# tianrun tt
# tt

# 说明:尽量不要在函数里面改全局变量;

说明:如果全局变量是列表,字典等变量,在局部是可以更改的。

递归

递归说白了就是自己调用自己
查看下面的例子

def aa (n):
    print(n)
    return aa(n+1)
aa(1) # 会无限循环,但是python规定,只能递归999次

特性:
1. 必须有一个明确的结束条件
2. 效率不高。若果循环过多可能会导致内存(栈)溢出

lambda 的使用

>>> a = lambda x:x+1
>>> a(1)
2

相当于下面的代码

def a(x):
    return x+1

其他

获取系统时间并格式话

>>> import time
>>> time_formate = '%Y-%m-%d %X'
>>> print(time.strftime(time_formate))
2017-12-14 15:09:04
>>>