第一个python程序
#!/usr/bin/env python3
print('hello, world')
$ chmod a+x hello.py
$ ./hello.py
$ hello, world
print("输出内容")
/ input("提示符")
python基础
基本数据类型
- 整数
1
,-1
,0
…十六进制用0x前缀0xff00
- 浮点数
1.23
,3.14
1.23x10的9次方就是1.23e9
0.000012可以写成1.2e-5 - 字符串
'abc'
,"xyz"
,Python用r’‘表示’'内部的字符串默认不转义 - 布尔值
True
、False
- 空值
None
None
不能理解为0
,因为0
是有意义的,而None
是一个特殊的空值 - 变量
a = 1
- 常量
PI = 3.14159265359
全部大写的变量名表示常量
除法/
:结果是浮点数
>>> 9 / 3
3.0
>>> 10 / 3
3.3333333333333335
除法//
,结果是整数
>>> 10 // 3
3
余数运算%
:
>>> 10 % 3
1
字符串
字符串是以Unicode编码
单个字符的编码,ord()
获取字符的整数表示,chr()
把编码转换为对应的字符
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'
Python的字符串类型是str
,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。应当始终坚持使用UTF-8
编码对str和bytes进行转换。
bytes类型的数据用带b前缀的单引号或双引号表示x = b'ABC'
要注意区分’ABC’和b’ABC’,前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节,而前者用Unicode表示占2个字节
len()
函数计算的是str
的字符数,如果换成bytes
,len()
函数就计算字节数:
>>> len('ABC')
3
>>> len('中文')
2
>>> len(b'ABC')
3
>>> len('中文'.encode('utf-8'))
6
Python解释器读取源代码为了按UTF-8编码读取,通常在文件开头写上这两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
格式化用%
实现:
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
用%%
来表示一个%
>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'
list和tuple
list有序集合 l = []
classmates = ['Michael', 'Bob', 'Tracy']
- -1做索引,直接获取最后一个元素
classmates[-1]
=‘Tracy’ - 追加元素到末尾
append('Adam')
- 元素插入到指定的位置
insert(1, 'Jack')
- 删除末尾的元素
pop()
- 删除指定位置的元素
pop(1)
tuple元组, t = ()
t = (1,)
classmates = ('Michael', 'Bob', 'Tracy')
- 没有append(),insert()这样的方法。
- tuple不可变,代码更安全。能用tuple代替list就尽量用tuple。
条件、循环判断
if
elif
else
for x in ...
Python提供一个range()函数,生成一个整数序列range(101)
可以生成0-100的整数序列
while
break
continue
dict和set
dict字典, d={}
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
d['Michael']
= 95- 通过
in
判断key是否存在'Thomas' in d
=False - 删除key,
pop(key)
,对应的value也会从dict中删除 dict
的key
必须是不可变对象,字符串、整数等都是不可变的
set无重复集合s = set([1, 2, 3])
- 添加元素
add(key)
- 删除元素
remove(key)
不可变对象
对于不可变对象str
进行操作
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'
虽然字符串有个replace()方法,也确实变出了’Abc’,但变量a最后仍是’abc’,应该怎么理解呢?
我们先把代码改成下面这样:
>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'
replace
方法创建了一个新字符串'Abc'
并返回,变量a仍指向原有的字符串'abc'
,但变量b
却指向新字符串'Abc'
了
tuple
虽然是不变对象,但把(1, 2, 3)放入dict或set中可以,(1, [2, 3])不可以。