共计 4199 个字符,预计需要花费 11 分钟才能阅读完成。
python
跟很多前端工作者一样,我也常常打听。作为前端,在要懂 js 的前提下,还要可以学什么其他语言来增加自己的竞争力。
我看到最多的是 node,很多人说前端真正的学好 node。已经可以胜任很多工作了。假如想学后端 java 是需求最大的。
不过目前来说 java 的学习成本很高,相对 python 是一门很好入门的语言,最近也是很火。
所以我想用一小段时间,快速了解一下 python。(本文用的是 python3.x)
数据类型
先看数据类型(看我们可以 pyhton 中写什么。)
- 整数
- 浮点数
- 字符串
- 布尔值
- 空值
乍一看基本类型和 js 的差不多。
在学习过程中我们会多次用到 print(); 类似于 js 的 console,就是打印输出。
声明
python 的声明没有关键字,声明和赋值写法一样。
counter = 100 # 整型变量 | |
miles = 1000.0 # 浮点型变量 | |
name = "John" # 字符串变量 | |
flag = True # 布尔类型变量 | |
print(counter) //100 | |
print(miles) //1000.0 | |
print(name) //"John" | |
print(flag) //True |
这种常用的是动态语言,与之相反的是静态语言。在声明时规定变量的类型。
int a = 123; // a 是整数类型变量 | |
a = "ABC"; // 会报错,不能把字符串赋给整型变量 |
格式化
相当于占位符,用 % 符号调用。
`'Hello, %s' % 'world' | |
// 'Hello, world' |
各种占位符
- %d 整数
- %f 浮点数
- %s 字符串
- %x 十六进制整数
其中当用到 % 时,需要转义一下。%%
>>> 'growth rate: %d %%' % 7 | |
'growth rate: 7 %' |
list
list 很像 js 中的数组。这里叫列表。其实也差不多,就是一个有序的存放数据的表。
>>> classmates = ['Michael', 'Bob', 'Tracy'] | |
print(classmates) | |
//['Michael', 'Bob', 'Tracy'] |
用 len()可以查看 list 的长度(同时也能看字符的长度)
classmates = ['Michael', 'Bob', 'Tracy'] | |
name = 'Michael' | |
print(len(classmates)) //3 | |
print(len(name)) //7 |
因为是有序的,list 中的数据都有自己的索引。索引从 0 开始。超出后会报错。
>>> classmates[0] | |
'Michael' | |
>>> classmates[1] | |
'Bob' | |
>>> classmates[2] | |
'Tracy' | |
>>> classmates[3] | |
Traceback (most recent call last): | |
File "<stdin>", line 1, in <module> | |
IndexError: list index out of range |
!!比 js 方便的是 list 可以调用索引 - 1 直接访问最后一位。
>>> classmates[-1] | |
'Tracy' | |
>>> classmates[-2] | |
'Bob' | |
>>> classmates[-3] | |
'Michael' | |
>>> classmates[-4] | |
Traceback (most recent call last): | |
File "<stdin>", line 1, in <module> | |
IndexError: list index out of range |
list 方法
append 在 list 最后添加数据
>>> classmates.append('Adam') | |
>>> classmates | |
['Michael', 'Bob', 'Tracy', 'Adam'] |
insert 可以在 list 指定位置插入数据
>>> classmates.insert(1, 'Jack') | |
>>> classmates | |
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam'] |
pop 直接使用删除 list 最后一位。带上索引删除指定位置。
>>> classmates.pop() | |
'Adam' | |
>>> classmates | |
['Michael', 'Jack', 'Bob', 'Tracy'] | |
>>> classmates.pop(1) | |
'Jack' | |
>>> classmates | |
['Michael', 'Bob', 'Tracy'] |
tuple
tuple 是类似 list 的,可是一旦定义了就不能修改。定义写法用的是()。
>>> classmates = ('Michael', 'Bob', 'Tracy') | |
>>> classmates | |
('Michael', 'Bob', 'Adam') |
一旦尝试通过 classmates[1]=”tom”。修改 tuple,会报错。tuple 可以保证一些不需要修改的数据被无意修改。
dict
dict 类似于 js 的对象。也就是 key-value 对的形式存数据。可以用名字快速地找到数据内容。
写法
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} | |
# js 的是用. python 用[] | |
>>> d['Michael'] | |
95 |
当数据多了之后 list 的查找速度会变慢,而 dict 几乎不受影响。可是 dict 会占用大量空间,是用空间来换取时间的一种方法。
如果 key 不存在,dict 就会报错:
>>> d['Thomas'] | |
Traceback (most recent call last): | |
File "<stdin>", line 1, in <module> | |
KeyError: 'Thomas' |
这时可以用 in 或者 get()来判断该 key 是否存在。
# in | |
>>> 'Thomas' in d | |
False | |
# get() | |
>>> d.get('Thomas') | |
>>> d.get('Thomas', -1) | |
-1 |
用 pop()可以删除 dict 中一项包括 key 和 value
>>> d.pop('Bob') | |
75 | |
>>> d | |
{'Michael': 95, 'Tracy': 85} |
set
set 与 dict 类型相似,可是 set 只存 key。可以用 add(),remove()来增减。
# 通过 list 来传入 | |
>>> s = set([1, 2, 3]) | |
>>> s | |
{1, 2, 3} | |
# add() | |
>>> s.add(4) | |
>>> s | |
{1, 2, 3, 4} | |
>>> s.add(4) | |
>>> s | |
{1, 2, 3, 4} | |
# remove() | |
>>> s.remove(4) | |
>>> s | |
{1, 2, 3} |
if 判断
来到了逻辑判断了,if。条件判断。首先于 js 不同 python 的分块不用 {} 而是用缩进和:(这个要注意)
age = 20 | |
if age >= 18: | |
print('your age is', age) | |
print('adult') | |
# 加入 else | |
age = 3 | |
if age >= 18: | |
# 符合条件走这里 | |
print('your age is', age) | |
print('adult') | |
else: | |
# 不符合条件走这里 | |
print('your age is', age) | |
print('teenager') |
对于 else if,python 有它的专用缩写
age = 3 | |
if age >= 18: | |
print('adult') | |
elif age >= 6: | |
print('teenager') | |
else: | |
print('kid') |
变量判断
if x: | |
print('True') |
只要 x 是非零数值、非空字符串、非空 list 等,就判断为 True,否则为 False。
input
终于出现了第一个交互功能 –input。用 input()程序会让用户输入文本并存放在对应位置,继续完成代码。
birth = int(input('birth:')) | |
# input()参入的字符,为输入时的提醒文本 | |
# 输入的值会被定义为 birth 的值,参与 if 判断。if birth < 2000: | |
print('00 前') | |
else: | |
print('00 后') |
注意 input 输入的文本类型是字符,字符不能直接用 <,> 对比。必须要先转成数字。用 int()可以把字符转成整数。
循环
white
只要满足 white 的条件,即为 true。就会一直跑循环里的代码。
sum = 0 | |
n = 99 | |
while n > 0: | |
sum = sum + n | |
n = n - 2 | |
print(sum) |
在循环内部变量 n 不断自减,直到变为 - 1 时,不再满足 while 条件,循环退出。
循环里的方法
break
break 可以提前结束循环。
n = 1 | |
while n <= 100: | |
if n > 10: # 当 n = 11 时,条件满足,执行 break 语句 | |
break # break 语句会结束当前循环 | |
print(n) | |
n = n + 1 | |
print('END') |
continue
continue 是跳过某次的代码直接进入下一次循环。
n = 0 | |
while n < 10: | |
n = n + 1 | |
if n % 2 == 0: # 如果 n 是偶数,执行 continue 语句 | |
continue # continue 语句会直接继续下一轮循环,后续的 print()语句不会执行 | |
print(n) |
for…in..
for in 可以枚举 list 或 tuple 里的数据.
names = ['Michael', 'Bob', 'Tracy'] | |
for name in names: | |
print(name) | |
#顺序输出 'Michael', 'Bob', 'Tracy' |
某些场景,python 是有提供基本方法的,不需要循环生成。list()可以让有序数据转换为 list。range()可以生成一个整数序列
>>> list(range(5)) | |
[0, 1, 2, 3, 4] |
场景
我们可以利用目前了解到的 python 语法做一款弱智的游戏。猜数字
import random | |
# 用一个 dict 存放需要的数据 | |
config = {'maxNum': 100,'minNum': 0,'count':0} | |
# 用模块生成随机数,模块是 python 中很重要的一环 | |
target = random.randint(config['minNum'],config['maxNum']) | |
# 让循环持续发生 | |
while True: | |
config['count'] += 1 | |
num = int(input('请输入 %d 至 %d 的整数:' % (config['minNum'],config['maxNum']))) | |
if num == target: | |
# 当猜对时 break 跳出循环 | |
break | |
elif num < target: | |
config['minNum'] = num | |
print('不对, 猜小了') | |
elif num > target: | |
config['maxNum'] = num | |
print('不对, 猜大了') | |
print('猜对了答案是 %d。一共猜了 %d 次' % (target,config['count'])) |