从前端到后台-Python基础
选择看廖雪峰老师的python教程作为入门,本周学完了基础、函数、高级特性函数式编程等部分。
数据类型与变量
和大多语言一样,python的数据类型包括Int, Float, Str, Boolean, 空(None), const
与JS的不同之处
- Pthon用None表示空,而非JS中的null
- 在数字除法中,python提供了地板除(//), 功能为忽略小数,直接返回结果的整数部分,类似Math.floor(result)
- 在Boolean中,python的True和False首字母大写
- 关于字符串的表示,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的几个函数类似,不同之处在于:
- 这里的几个函数是直接调用并把array作为参数
- 第一个参数为函数
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