Python基础知识
一、数据类型和变量
1. 整数
2. 浮点数
- 很大或很小的浮点数需要用科学计数法表示,比如:1.23x109就是
1.23e9
,0.000012可以写成1.2e-5
。
3. 字符串
-
可以用单引号和双引号表示,比如:
'abc'
,"xyz"
,''
或""
本身只是一种表示方式,不是字符串的一部分 -
如果字符串内部既包含
'
又包含"
,可以用转义字符\
来标识 -
如果字符串里面有很多字符都需要转义,用
r''
表示''
内部的字符串默认不转义,比如:>>> print('\\\t\\') \ \ >>> print(r'\\\t\\') \\\t\\
-
如果字符串内部有很多换行,Python允许用
'''...'''
的格式表示多行内容,比如:>>> print('''line1 ... line2 ... line3''') line1 line2 line3
注意:
...
是提示符,不是代码的一部分
二、字符串和编码
1、字符编码
- 在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
- UTF-8编码将常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
- 推荐用UTF-8编码
2、字符串
(1) 编码相关
-
最新的Python 3版本中,字符串是以Unicode编码的,支持多语言,比如
>>> print('包含中文的str') 包含中文的str
-
ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符,比如:>>> ord('中') 20013 >>> chr(66) 'B'
-
Python的字符串类型是
str
,而内存中以Unicode表示,如果要在网络上传输,或者保存到磁盘上,就需要把str
变为以字节为单位的bytes
。Python对bytes
类型的数据用带b
前缀的单引号或双引号表示,比如:x = b'ABC'
-
encode()
方法可以将Unicode表示的str
编码为指定的bytes
,比如:>>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87'
需要注意的是:纯英文的
str
可以用ASCII
编码为bytes
,内容是一样的,含有中文的str
可以用UTF-8
编码为bytes
。含有中文的str
无法用ASCII
编码,因为中文编码的范围超过了ASCII
编码的范围,Python会报错 -
decode()
方法可以将从网络或磁盘上读取的字节流(读到的数据是bytes
)变为str
,比如:>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') '中文'
注意:如果
bytes
中只有一小部分无效的字节,可以传入errors='ignore'
忽略错误的字节,也就是decode('utf-8', errors='ignore')
-
len()
函数可以计算str
的字符数,如果换成bytes
,len()
函数就计算字节数,比如:>>> len('中文') 2 >>> len('中文'.encode('utf-8')) 6
注意:可以看出,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。
-
应当始终坚持使用UTF-8编码对
str
和bytes
进行转换。
(2)编码注意点
-
当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python3 # -*- coding: utf-8 -*-
-
必须并且要确保文本编辑器正在使用
UTF-8 without BOM
编码
(3)字符串格式化
-
用
%
运算符来格式化字符串- 整数:%d
- 浮点数:%f
- 字符串:%s
- 十六进制整数:%x
比如:
>>> 'Hi, %s, you have $%d.' % ('xxq', 1000000) 'Hi, xxq, you have $1000000.' >>> print('%.2f' %3.14159) 3.14 >>> print('%2d-%03d' %(3,1)) 3-001
-
用
%
来转义%
运算符,用%%
来表示一个%
,比如:>>> 'growth rate: %d %%' % 7 'growth rate: 7 %'
三、使用list和tuple
1. list
(1)list的初始化
-
list是可变的有序的集合,可以很方便的初始化,比如:
>>> classmates = ['Michael', 'Bob', 'Tracy'] >>> classmates ['Michael', 'Bob', 'Tracy']
-
list中的元素可以是不同的类型,比如:
>>> L = ['Apple', 123, True]
(2)list的常见操作
-
用
len()
函数可以获取list的长度 -
可以直接用索引值来访问元素,支持负数索引,比如:
>>> classmates[2] 'Tracy' >>> classmates[-1] 'Tracy'
-
向list中添加新的元素,包括追加到末尾,以及插入到指定位置:
-
追加到末尾:append
>>> classmates.append('Adam') >>> classmates ['Michael', 'Bob', 'Tracy', 'Adam']
-
插入到指定位置:insert
>>> classmates.insert(1, 'Jack') >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
-
-
删除元素
-
删除末尾元素:pop
>>> classmates.pop() 'Adam'
-
删除指定位置的元素:pop(i)
>>> classmates.pop(1) 'Jack'
-
-
替换指定位置元素,直接用索引赋值就好,比如:
>>> classmates[1] = 'Sarah'
(3)list的特殊场景
-
list中可以包含list,形成多维数组,比如:
>>> s = ['python', 'java', ['asp', 'php'], 'scheme'] >>> len(s) 4
要取出上述例子中的
'php'
,就可以这样:>>> s[2][1] 'php'
-
可以用
sort()
函数来对list进行排序,比如:>>> a = ['c', 'b', 'a'] >>> a.sort() >>> a ['a', 'b', 'c']
2. tuple
(1)基本特点
-
也是一种有序列表,和list很像
-
tuple是不可变的,一旦初始化就不能修改,所以没有跟修改有关的方法,比如append,intsert,也不能进行赋值操作
-
如果可能,能用tuple代替list就尽量用tuple
-
当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:
t = (1, 2)
或者定义一个空的tuple:
>>> t = () >>> t ()
(2)特殊情况
-
特别需要注意的是,要定义一个只有1个元素的tuple,必须加在元素后面加上
,
,比如:>>> t = (1,) >>> t (1,)
-
tuple是不可变的,指的是tuple中的元素的指向不可变,但是tuple指向的元素可以是能变化的,比如可以是一个list,比如:
>>> t = ('a', 'b', ['A', 'B']) >>> t[2][0] = 'X' >>> t[2][1] = 'Y' >>> t ('a', 'b', ['X', 'Y'])
四、条件判断
1. 基本的用法
-
if
语句的完整形式是:if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4>
-
if
的执行顺序是从上往下,如果为true
,则执行对应缩进的代码块
2. 特殊的场景
-
if
的判断条件可以简写,比如:if x: print('True')
只要
x
是非零数值、非空字符串、非空list等,就判断为True
,否则为False
。
五、循环
1. for...in 循环
-
for...in循环用于将把list或tuple中的每个元素迭代出来,比如:
sum = 0 for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: sum = sum + x print(sum)
-
可以用
range()
函数生成一个整数序列,比如上面的例子就可以改为:sum = 0 for x in range(11): sum = sum + x print(sum)
-
还可以用
list()
函数将range()
函数生成的序列转为list,比如:>>> list(range(5)) [0, 1, 2, 3, 4]
2. while循环
while循环就是:只要条件满足,就不断循环,条件不满足时退出循环。比如我们要计算100以内所有奇数之和:
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
3. break中断循环
在循环中,break
语句可以提前退出循环,比如还是上面的例子中:
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
if n < 50: #当n = 49时,条件满足,就会执行break语句
break #break语句会结束当前循环,直接执行while循环后面的语句
print(sum)
上面本来是要计算100以内的奇数之和,加了break语句以后,50以内的奇数就不会计算了
4. continue跳过当前循环
在循环中,可以用continue
语句跳过当前的这次循环,直接开始下一次循环:
n = 0
while n < 10:
n = n + 1
if n % 2 == 0: # 如果n是偶数,执行continue语句
continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
print(n)
上面的例子本来是计算10以内的整数之和,加了continue语句以后就把偶数过滤掉了
六、使用dict和set
1. dict字典
(1)基本的特点
- 使用键-值(key-value)存储,具有极快的查找速度
- 和
list
比较,dict
有以下几个特点:- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
- dict内部存放的顺序和key放入的顺序是没有关系
(2)基本的用法
-
初始化可以一次性生成一个
dict
,比如:>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
-
从
dict
中取值的话直接用key
来获取,把比如:>>> d['Michael'] 95
-
修改某个
key
对应的值的话可以直接重新赋值, 比如:>>> d['Michael'] = 90 >>> d['Michael'] 90
注意:重复添加同一个
key
,后面的值会把前面的值覆盖掉 -
判断某个
key
是否在dict
中,可以通过in
判断,比如:>>> 'Thomas' in d False
也可以通过
dict
提供的get()
方法,如果key不存在,可以返回None
,或者自己指定的value:>>> d.get('Thomas') >>> d.get('Thomas', -1) #如果不存在'Thomas',就会返回-1 -1
注意:返回
None
的时候Python的交互环境不显示结果。 -
通过
pop(key)
方法删除一个key
,对应的value
也会删除, 比如:>>> d.pop('Bob') 75 >>> d {'Michael': 95, 'Tracy': 85}
(3)特殊情况
- dict的key必须是不可变对象,因为dict通过哈希算法来计算key的位置,要保证hash的正确性,作为key的对象就不能变
- 在Python中,字符串、整数等都是不可变的,可以作为key,但是list是可变的,就不能作为key
2. set集合
(1)基本特点
- 和dict类似,也是一组key的集合,但是不存储value
- 在set中,没有重复的key,重复的元素自动被过滤
- 在set中,元素是无序的
(2)基本的用法
-
初始化一个set需要传入一个list,比如:
>>> s = set([1, 2, 3]) >>> s {1, 2, 3} #不代表是有序的喔
重复元素在set中自动被过滤:
>>> s = set([1, 1, 2, 2, 3, 3]) >>> s {1, 2, 3}
-
add(key)
方法可以添加元素到set中:>>> s.add(4) >>> s {1, 2, 3, 4}
注意:可以重复添加,但是不会起作用
-
remove(key)
方法可以删除元素:>>> s.remove(4) >>> s {1, 2, 3}
-
2个set可以做集合的交集和并集操作,比如:
>>> s1 = set([1, 2, 3]) >>> s2 = set([2, 3, 4]) >>> s1 & s2 {2, 3} >>> s1 | s2 {1, 2, 3, 4}
(3)特殊情况
- set和dict一样,key必须是不可变对象
3. 不可变对象
对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的
比如:
>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'
欢迎关注我的公众号查看更多精彩文章!
转载自:https://juejin.cn/post/7365345063850999848