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