从前端到后台-Python基础

选择看廖雪峰老师的python教程作为入门,本周学完了基础、函数、高级特性函数式编程等部分。

数据类型与变量

和大多语言一样,python的数据类型包括Int, Float, Str, Boolean, 空(None), const
与JS的不同之处

  1. Pthon用None表示空,而非JS中的null
  2. 在数字除法中,python提供了地板除(//), 功能为忽略小数,直接返回结果的整数部分,类似Math.floor(result)
  3. 在Boolean中,python的True和False首字母大写
  4. 关于字符串的表示,python支持使用”%”做占位符 - 类似C语言,也可以看做与JS中转义字符串功能类似`this is ${VARABLE}`

list, tuple, dict, set

这些可以分别与JS中的一些类型对应:
list - JS中的array
tuple - JS中的const array. tuple写法和list类似,只是把中括号[]换成了圆括号()
dict - JS中的Map
set - JS中的Set

条件判断与循环

if与for,需要注意的是Python是以 冒号 + 4个缩进 来操作的

函数

这里主要注意函数的参数可变参数*args和关键字参数**kw
可变参数允许传入0或任意个参数,这些参数在函数中自动组装为一个tuple
关键字参数允许传入0或任意个含参数名的参数,这些参数在函数中自动组装为一个dict
例:

def fun(a, b, *c, **d):
    print(c)
    print(d)
    return a + b
fun(1, 2, 'x', 'y', z=1)
# output: ('x', 'y')
# output: {'z': 1}
# output: 3

高级特征

切片、迭代、列表生成式、生成器和迭代器

  • 切片 - 类似JS数组中的slice, 写法为str[start = 0 : end = length - 1 : gap = 1]. 另外,Python的切片支持负数且倒数第一个元素的索引为-1:
    'abcd'[-2:] #output: 'cd'
    
  • 迭代 - 能够通过for循环遍历的称为可迭代对象。除list和tuple外,dict同样支持
    x = {'a': 1, 'b': 1}
    for key in x:
        print(key) 
    for value in x.values():
        print(values) 
    for key, val in x.items():
      print key, val
    
  • 列表生成器 - [x * x for x in range(3)], 支持两重循环 - [a + b for a in range(2) for b in range(4)]
  • 生成器 - generator, next, yield, 类似JS的生成器
  • 迭代器 - 注意迭代器和可迭代的区别(可以直接作用于for循环的数据类型称之为可迭代,可以被next()函数调用并不断返回下一个值的对象称为迭代器)

函数式编程

最开始的高级函数中介绍了map/reduce, filter, sorted四个函数,与JS中Array的几个函数类似,不同之处在于:

  1. 这里的几个函数是直接调用并把array作为参数
  2. 第一个参数为函数
list(map(str, [1,2,3])) 
#output: ['1', '2'] (map返回类型为对象,需通过list转化)

def add(x, y):
      return x + y
reduce(add, [1, 2, 3])  
#output: 6

def odd(x):
      return x%2 == 1
list(filter(odd, [1,2,3])) 
#output: 1, 3 (filter返回类型为对象,需通过list转化)

sorted([-1, 6, 0, -4], key=abs) #sorted第二个参数用来表示排序规则
#output [0, -1, -4, 6]

之后分别介绍了返回函数,匿名函数,装饰器和偏函数:

  • 返回函数 - 及返回函数的函数,这里有个闭包的概念,与JS类似
  • 匿名函数 - lambda函数,类似JS中的箭头函数,写法为:
    f = lambda x: x * x
    f(3)  #output: 9
    
  • 装饰器 - 在代码运行期间动态增加功能的方法:
    def log(func):
      def wrapper():
          print('call %s():' % func.__name__)
          return func()
      return wrapper
    @log
    def sayHi():
      print('Hi')
    sayHi()
    #output: call sayHi():
    #output: 2019-10-11
    
  • 偏函数 - 用于简化参数的函数:
    import functools
    int2 = functools.partial(int, base=2)
    int2('1000000')
    #output: 64