• Python学习笔记 ---第三章


    函数

    函数是代码的一种抽象

    函数 说明
    abs 绝对值
    max 最大值
    hex 转换为16进制

    强制数据类型转换

    int('123')
    123
    int(12.35)
    12
    srt(100)
    '100'
    bool(1)
    True

    定义函数

    定义一个函数,依次写出函数名,括号中的参数和冒号: 最后return返回

    def my_abs(x):
    if x >=0:
    return x
    else
    return -x
    *空函数 定义一个空函数
    def nop()
    pass

    *返回多个值

    import math
    def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

    然会同时获得返回值

    x, y = move(100, 100, 60, math.pi / 6)
    print(x, y)
    151.96152422706632 70.0

    这只是一种假象,Python函数返回的仍然是单一值

    r = move(100, 100, 60, math.pi / 6)
    print(r)
    (151.96152422706632, 70.0)
    返回了一个tuple

    *定义函数时,要确定函数名和参数个数,可以先对参数的数据类型进行检查
    函数体内部可以用return随时返回函数结果,没有执行完毕也没有return语句时返回None
    函数可以返回多个值,骑其实就是一个tuple

    递归函数

    *在函数内部调用自身就是递归函数

    def fact(n):
    if n == 1
    return 1
    return n * fact(n-1)

    *递归要防止栈溢出,可以用尾递归优化防止溢出

    def fact(n):
    return fact_iter(n,1)
    def fact_iter(num,product):
    if num == 1:
    return product
    return fact_uter(num - 1,num*product)

    return fact_iter(num - 1, num * product)仅返回递归函数本身,num - 1和num * product在函数调用前就会被计算,不影响函数调用。

    使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。
    针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环。

    高级函数

    *切片
    取出一个list中的部分元素

    L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
    L[0:3] #取出前三个元素,从0开始不包括3
    ['Michael', 'Sarah', 'Tracy']
    L[-2] #倒序切片,从-1开始
    ['Bob', 'Jack']

    建立一个0-99的数列

    L = list(range(100))
    L
    [0,1,2,3,.....,99]

    前十个,每两个取一个
    L[:10:2]
    [0,2,4,6,8]
    所有数,每隔5个取一个
    L[::5]
    [0,5,10,.....,95]

    tuple也可以进行切片,结果仍是一个tuple
    (0,1,2,3,4,5)
    [:3]
    (0,1,2)

    字符串'XXX'也可以看做list,可以进行切片
    'ABCDEFG'[:3]
    'ABC'

    迭代

    一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
    Python中通过for ... in 进行迭代

    d = {'a':1,'b':2,'c':3}
    for key in d:
    print(key) #迭代出key

    for value in d.values() #迭代value
    for k,v in d.items() #迭代value 和key

    collection模块中的lterable类型判断对象是否可以迭代

    from collections import Iterable
    isinstance('abc', Iterable) # str是否可迭代
    True

    Python内置的enumerate函数可以把一个list变成索引-元素对,在for循环中同时迭代索引和元素本身

    for i, value in enumerate(['A', 'B', 'C']):
    print(i, value)
    0 A
    1 B
    2 C
    任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环

    列表生成式

    list(range(1, 11))
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #生成1-10的list

    生成[1x1, 2x2, 3x3, ..., 10x10]
    1.循环

    L = []
    for x in range(1, 11):
    L.append(x * x)
    L
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    2.list

    [x*x for x in range(1,11)]
    [1,4,16,25, 36, 49, 64, 81, 100]

    for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方

    [x*x for x in range(1,11) if x%2 == 0]
    [4,16,36,64,100]

    两层循环生成全排列

    [m + n for m in 'ABC' n in 'XYZ']
    ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

    列表生成式可使用两个变量生成list

    d = {'x':,'A','y':'B','z',:'C'}
    [k + '=' + v for k,v in d.items()]
    ['y=B','x=A','z=C']

    生成器

    在Python中一边循环一边计算的机制,称为生成器:generator
    把列表生成器的[]改为()就建立了一个generator

    L = [x * x for x in range(10)]
    g = (x * x for x in range(10))
    通过next() 获得generator的下一个返回值
    next(g)
    0
    next(g)
    1
    next(g)
    4
    然后加入for循环
    g = (x * x for x in range(10))
    for n in g:
    print (n)
    0
    1
    4
    16

    斐波拉契数列

    def fib(max):
    n,a,b =0,0,1
    while n < max:
    print(b)
    a,b = b,a+b
    n = n+1
    return 'done'

  • 相关阅读:
    牛顿插值法及其C++实现
    见鬼吧,拉格朗日插值法
    迭代法与开根号求值(letcode 69)
    多项式计算之秦九韶算法
    (扩展根目录容量方法汇总)把Linux系统迁移到另一个分区或者硬盘
    jdk 动态代理源码分析
    python 随笔
    java 笔记
    enum(枚举类型)
    提高工作效率的准则
  • 原文地址:https://www.cnblogs.com/battleblock/p/4817451.html
Copyright © 2020-2023  润新知