Python学习系列(四)——函数的使用

Python学习系列(四)——函数的使用

——————————————————————————

    稍微写过超过100行代码的人大概又会有一个印象,写代码的时候别上来直接写全部内容,分成子函数慢慢写,逐个攻破,python怎么能没有函数呢?来,见证一下。

1. 基本操作

    1.1 lambda函数
    lambda是一种匿名函数,适合于写简单函数,能一行搞定的那种函数。

>>> f = lambda x, y : x ** 2 - 2 * x * y  + y **2   #冒号左侧为参数,右侧为运算
>>> f(10, 12)
4

2. 函数调用

def print_str():             #定义子函数
    a, b = 3, 4
    a, b = b, a
    print(a, ", " ,b)

if __name__ == '__main__':   #主函数入口
    print_str()              #调用子函数

3. 函数传参

    3.1 可选参数。

def print_str(str, times = 2):   #第二个参数为默认值
    str = str * times
    print(str)

if __name__ == '__main__':
    print_str("test  ")        #只传递了第一个参数

    3.2 可变参数

def print_str(str, *str1): #第二个参数面前加*号,传递进来的参数为元组
    for i in str1:         #用变量i去遍历元组
        str = str + i
    print(str)

if __name__ == '__main__':
    print_str("this ", "is ", "a ", "test.")   #传递四个参数

    运行结果:

this is a test.

    3.3 参数位置和名称传递

def func(x1, y1, x2, y2):    #指定形参名称的时候,参数间的顺序可以任意调整
    print("x1 =",x1)
    print("x2 =",x2)
    print("y1 =",y1)
    print("y2 =",y2)

if __name__ == '__main__':
    func(y2 = 1, x2 = 2, y1 = 3, x1 = 4)    #对形参赋值传递

    运行结果:

x1 = 4
x2 = 2
y1 = 3
y2 = 1

4. 函数的返回值

import math

def func(x1, y1, x2, y2):
    return math.sqrt((x1 - y1) ** 2 + (x2 - y2) ** 2)   #计算两点之间的距离并返回

if __name__ == '__main__':
    dis = func(y2 = 1, x2 = 2, y1 = 3, x1 = 4)     #dis接收return的返回值
    print(dis)

5. 函数对变量的作用

count = 1

def func(a):            #表明子函数中的局部变量不影响全局变量
    count = a
    count *= a

if __name__ == '__main__':
    func(10)
    print(count)         #输出的结果是1
count = 1

def func(a):
    global count          #加入global全局变量声明后,局变成了全变
    count = a
    count *= a

if __name__ == '__main__':
    func(10)
    print(count)              #这次的值是100
ls = []        #列表,组合数据类型

def test(a, b):
    ls.append(b)    #引用全局变量

if __name__ == '__main__':
    test(1, 2)
    print(ls)   #全局变量的值在子函数中被改变,输出[2]
ls = []

def test(a, b):
    ls = []            #创建一个局部变量屏蔽全局变量
    ls.append(b)

if __name__ == '__main__':
    test(1, 2)
    print(ls)       #输出[],全局变量的值没被改变

6. 函数递归

    函数递归是一种最头疼的东西,比如在数据结构里面,什么归并排序、调堆、先中后遍历二叉树,用递归实现对我来说还是比较头疼的,简直有毒,这里就举几个简单的能看懂的例子吧。。。数据结构这种东西,珍爱生命,远离data structure。

def fact(n):    #一个老掉牙的例子,计算阶乘
    if n == 1:
        return 1
    else:
        return n * fact(n-1)

if __name__ ==  '__main__':
    print(fact(4))

    下面的例子是想对字符串进行反转的,但是程序会报错,为什么呢?超过了最大递归深度,Python防止你写的程序有bug,无休止的递归会很浪费计算资源。之前用效率最快的C语言写递归的时候,递归层数过多的时候,代码会执行的很慢,毕竟递归这玩意是用栈实现的,保存断点在返回,还是很费时间的。所以,某种程度上递归也不是个好东西。

def reverse(str):
    reverse(str[1:] + str[0])

if __name__ == '__main__':
    s = reverse("123456789")
    print(s)

>>>RecursionError: maximum recursion depth exceeded

猜你喜欢

转载自blog.csdn.net/asd20172016/article/details/81105858