人工智能学习 4 - Python的 条件 循环 推导式 与 函数

条件

1
2
3
4
5
6
if cond:
pass
elif cond:
pass
else:
pass

循环方式: while 循环, for 循环

1
2
3
4
while cond:
break
continue
pass
1
2
for item in str/list/tuple/set/dict/dict.keys()/dict.values()/dict.items():
print(item) # 只写 dict 本身得到是key

推导式

  1. 三元操作符: x if cond else y

  2. 列表推导式: [expr for item in var]

    • 基本形式 [x*x for x in range(1,20)
    • 带if条件 [x*x for x in range(1,20) if x%2 == 0]
    • 带if-else条件 [x*x if x%2 == 0 else -x for x in range(1,20)]
    • 多重循环 [x+y+z for x in "123" for y in "456" for z in "789"]
  3. 集合推导式: [] 换成 {}

  4. 字典推导式: {k: v for xx in yy}

函数

功能的封装, 代码的复用

  1. 函数的基本结构

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 空2行
    def func_name([params tuple]):
    """doc str
    ...
    """

    # func body

    [return expr]
    # 空2行
  2. 返回值, 与返回值 tuple 解构

    1
    2
    v = func_name()
    v1, v2 = func_name()
  3. 参数的使用: 形参 vs 实参

    • 位置参数: 按位置顺序传参 func(v)
    • 关键字参数: 给定参数key func(k=v)
    • 可变tuple参数: 定义 func(*args), args 是元组类型, 调用方法 func(a, b, ..)func(*list)
    • 可变dict参数: 定义 func(**kwargs), kwargs 是字典类型, 调用方法 func{k1=v1, k2=v2, ..}func(*dict)
  4. 参数的引用传递

    参数传递以引用的方式传递, ps: NodeJS 和 Go 都是值传递, 在传递复杂类型的时候, 传递的是复杂类型指针的值, 实现了引用传递.

    • 可变对象更改直接影响原值
    • 不可变对象赋值会断开原引用, 创建新的对象
  5. 作用域

    • 函数内部变量使用 global 提升为全局变量
    • 函数内部变量与全局变量不冲突时(在函数内没有声明,赋值), 在函数内可以直接使用全局变量的值, 但是不使用 global 提权的情况下修改不对全局变量生效(一旦有修改,就相当于定义了局部变量, 与全局有冲突了)
  6. 匿名函数 lambda

    f = lambda params: expr

    eg: sorted(var, key=lambda x: len(x))
    eg: iter = map(lambda x: x*x, list/tuple/dict.values())

  7. 装饰器函数

    1
    2
    3
    @property
    def value(self):
    return self._v
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    # 需要一个wrapper功能
    def wrapper(fn):
    st = time.time()
    fn()
    ed = time.time()
    print("elapse", ed - st, "s")

    wrapper(fn)

    # 对 wrapper 功能封装
    def timer(fn):
    def wrapper():
    st = time.time()
    fn()
    ed = time.time()
    print("elapse", ed - st, "s")
    return wrapper

    timer(fn)()

    # 封装后赋值给 原函数名 实现无感封装
    fn = timer(fn)
    fn()

    # 或者直接使用装饰器
    @timer
    def fn():
    pass
Donate - Support to make this site better.
捐助 - 支持我让我做得更好.