廖雪峰Python笔记

廖老师教程写的还是不错的,看了一下午,基本可以写脚本了。

  • Hello World

    • 不用写分号
  • 输入输出

    • print输出,多个字符串用逗号隔开,中间会填补空格,相当于print(join(args))
    • name = input(), 等待键盘输入,结果存到name中。
  • 数据类型:

    • 字符串
      • 单引号和双引号括起来的都是字符串,字符串中还有单双引号的用\转义(这件事儿IDE应该会帮我们干好)。
      • 换行\n,要打印\本身,要用\来转义,即\\。忽略转义打印字面值r''(并不是很好使)
      • 多行,'''...''',什么日了狗的写法,辣鸡。
      • 编码: str.encode(charset), 解码: bytes.decode(charset)
      • 格式化:print('%2d-%02d' % (3, 1))
    • 布尔值
      • Ture,False(大写首字母)
      • 逻辑运算:and 与,or 或,not
    • 空值:None
    • 变量:字母数字下划线组成,不能以数字开头。
    • 常量:大写
  • 基本数据结构

    • List:
      • 创建list:classmates = ['Michael', 'Bob', 'Tracy']
      • 获取长度:len(classmates) # 3
      • Random Access: classmates[1] # Bob
      • Reverse �Access: classmates[-1 # Tracy]
      • 从尾部追加:classmates.append('Adam') #['Michael', 'Bob', 'Tracy', 'Adam']
      • Random Insert: classmates.insert(1, 'Jack') #['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
      • 删除尾部元素:pop()
      • Random Delele:pop(i)
      • Random Update: classmates[1] = 'Sarah'
      • List元素数据类型不用一致。
    • tuple
      • 有序不可修改
      • 多种类型
      • 一个元素的tuplet = (1,)
    • dict
      • 创建:d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
      • 读取:d['Adam']
      • 插入和更新:d['Jack'] = 88
      • 删除:d.pop('Bob')
    • Set(Set中的元素不可变)
      • 创建Set:s = set([1, 2, 3], 或者s = {1, 2, 3}
      • 添加元素:s.add(4)
      • 删除元素: s.remove(4)
      • 运算: 交集 s1 & s2,并集s1 | s2
  • 流程控制

    • if elif else,注意缩进和:日了你哥的写法。
    • for in range while 懒得写了,最基本的
  • 函数

    • 内置函数

    • 定义函数:

      def my_abs(x):
          if x >= 0:
              return x
          else:
              return -x
      
    • 参数:

      • 默认参数:def power(x, n=2) 默认参数要不可变
      • 可变参数: def calc(*numbers)
      • 关键字参数(传入必须参数后,再可以传一个dict):def person(name, age, **kw):
      >>> person('Adam', 45, gender='M', job='Engineer')
      name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
      
      >>> extra = {'city': 'Beijing', 'job': 'Engineer'}
      >>> person('Jack', 24, **Extra)
      >>> #传入的只是Extra的一个拷贝,不会修改外部数据
          name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
      
      • 命名关键字参数:用来控制关键字的名字:
          def person(name, age, *, city, job):
              print(name, age, city, job)
      
      • 如果前边有偶可变参数,不用单独加*
      • 参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
    • 切片:

      • 列表L正常切:L[0:3]
      • 开头为0可以省略:L[:3]
      • 反向切:L[-2:] #取后两个元素
      • 跳着切:L[::5]
      • 原样复制:L[:]
    • 迭代

      • 就一个foreach,可以用于任何Iterable的东西上。
      • 如果需要index
          >>> for i, value in enumerate(['A', 'B', 'C']):
                print(i, value)
          0 A
          1 B
          2 C
      
    • 列表生成器,毛列表生成器,就是个for引导:

          >>> [x * x for x in range(1, 11) if x % 2 == 0]
          [4, 16, 36, 64, 100]
      
          >>> [m + n for m in 'ABC' for n in 'XYZ']
          ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
      
    • 生成器:

      • 普通生成器:g = (x * x for x in range(10)) 只是把列表的【】变成括号
      • 调用next()来蹦出一个个元素。
      • 宝宝用yield写一个斐波那契吧,教程写的不好看
          def fib():
              yield 0
              yield 1
              head = fib()
              tail = fib()
              next(tail)
              while True:
                  yield next(head) + next(tail)
      
    • 高阶函数:

      • map/reduce/filter:没啥特别的,函数直接传名。reduce是左结合的,这几个api一致性做的还不错,第一个参数是函数,第二个参数是list
      • 返回一个空参数闭包可以实现lazy
      • lambda: 只能写一行,真撒哔啊这种写法。
      • 函数可以在函数里面声明:
          def log(text):
              def decorator(func):
                  def wrapper(*args, **kw):
                      print('%s %s():' % (text, func.__name__))
                  return func(*args, **kw)
              return wrapper
          return decorator
      
      • 偏函数:就是Curry了一下,没啥特别的。

你可能感兴趣的:(廖雪峰Python笔记)