Python零碎知识点记录

函数内部想要改变全局变量方式(函数内部对全局变量使用global定义):

count = 5
def test():
    global count
    count = 10
    print(count)
test()
print(count)

结果:10     10

什么是闭包(在一个内部函数里会在外部作用域的变量进行引用,该内部函数就是一个闭包):

下面fun2是一个内部函数,是一个闭包

def fun1(x):
    def fun2(y):
        return x*y
    return fun2
print(fun1(2)(3))

结果:6

内部函数想要修改外部函数的变量(Python3可以使用关键字nonlocal;python3之前可以使用容器装进去):

def fun1():
    x = 5
    def fun2():
        nonlocal x
        x *= x
        return x
    return fun2()
print(fun1())
def fun1():
    x = [5]
    def fun2():
        x[0] *= x[0]
        return x[0]
    return fun2()
print(fun1())

结果都是:25

lambda表达式的使用:
冒号前面是参数,后面是返回值,多个参数用逗号隔开

g = lambda x: 2*x+1
print(g(2))

结果:5

filter过滤器(第一个参数为函数名或None,第二个参数为一个iterable对象):

print(list(filter(None,[1,0,False,True])))

结果:[1, True]

def odd(x):
    return x % 2
temp = range(10)
show = filter(odd,temp)
print(list(show))

结果:[1, 3, 5, 7, 9]

用lambda的方法:print(list(filter(lambda x: x % 2, range(10))))

map映射函数:

print(list(map(lambda x: x * 2, range(10))))

 结果:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

递归:

递归的深度默认为100层,可以通过以下代码设置递归的深度:

import sys
sys.setrecursionlimit(100000)
# 非递归版本
def factorial(n):
    result = n
    for i in range(1, n):
        result *= i
    return result
print(factorial(5))
#递归版本
def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)
print(factorial(5))

以上例子只是个例子没必要用递归,用递归要小心深度不够会报错。

斐波那契数列:

迭代实现:

def fab(n):
    n1 = 1
    n2 = 1 
    n3 = 1
    if n < 1:
        print("输入有误")
        return -1
    while (n-2) > 0:
        n3 = n2 + n1
        n1 = n2
        n2 = n3
        n -= 1
    return n3
result = fab(20)
if result != -1:
    print("总共有%d对小兔崽子诞生" % result)

递归实现:

def fab(n):
    if n < 1:
        print("输入有误")
        return -1
    if n == 1 or n == 2:
        return 1
    else:
        return fab(n-1)+fab(n-2)
result = fab(20)
if result != -1:
    print("总共有%d对小兔崽子诞生" % result)

汉诺塔:

def hannoi(n, x, y, z):
    if n == 1:
        print(x, '--->', z)
    else:
        hannoi(n-1, x, z, y)#将前n-1个盘子从x移动到y上
        print(x, '--->', z)#将最底下的最后一个盘子从x移动到z上
        hannoi(n-1, y, x, z)#将y上的n-1个盘子移动到z上
n = int(input('请输入汉诺塔的层数:'))
hannoi(n, 'x', 'y', 'z')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值