三个双引号或三个单引号可以将多行字符串赋值给变量
字符串方法
a = "Hello, World!"
print(a.replace("World", "Kitty"))# Hello, Kitty!
a = "Hello, World!"
print(a.split(",")) # returns ['Hello', ' World!']
检查字符串:in/not in 关键字
txt = "China is a great country"
x = "ina" in txt
print(x)#True
字符串格式
age = 63
txt = "My name is Bill, and I am {}"
print(txt.format(age)) #My name is Bill, and I am 63
quantity = 3
itemno = 567
price = 49.95
myorder = "I want {} pieces of item {} for {} dollars."
print(myorder.format(quantity, itemno, price))#I want 5 pieces of item 789 for 24.36 dollars.
quantity = 3
itemno = 567
price = 49.95
myorder = "I want to pay {2} dollars for {0} pieces of item {1}."
print(myorder.format(quantity, itemno, price))#I want to pay 24.36 dollars for 5 pieces of item 789.
字符串方法
方法 | 描述 |
---|---|
capitalize() | 把首字符转换为大写。 |
casefold() | 把字符串转换为小写。 |
center() | 返回居中的字符串。 |
count() | 返回指定值在字符串中出现的次数。 |
encode() | 返回字符串的编码版本。 |
endswith() | 如果字符串以指定值结尾,则返回 true。 |
expandtabs() | 设置字符串的 tab 尺寸。 |
find() | 在字符串中搜索指定的值并返回它被找到的位置。 |
format() | 格式化字符串中的指定值。 |
format_map() | 格式化字符串中的指定值。 |
index() | 在字符串中搜索指定的值并返回它被找到的位置。 |
isalnum() | 如果字符串中的所有字符都是字母数字,则返回 True。 |
isalpha() | 如果字符串中的所有字符都在字母表中,则返回 True。 |
isdecimal() | 如果字符串中的所有字符都是小数,则返回 True。 |
isdigit() | 如果字符串中的所有字符都是数字,则返回 True。 |
isidentifier() | 如果字符串是标识符,则返回 True。 |
islower() | 如果字符串中的所有字符都是小写,则返回 True。 |
isnumeric() | 如果字符串中的所有字符都是数,则返回 True。 |
isprintable() | 如果字符串中的所有字符都是可打印的,则返回 True。 |
isspace() | 如果字符串中的所有字符都是空白字符,则返回 True。 |
istitle() | 如果字符串遵循标题规则,则返回 True。 |
isupper() | 如果字符串中的所有字符都是大写,则返回 True。 |
join() | 把可迭代对象的元素连接到字符串的末尾。 |
ljust() | 返回字符串的左对齐版本。 |
lower() | 把字符串转换为小写。 |
lstrip() | 返回字符串的左修剪版本。 |
maketrans() | 返回在转换中使用的转换表。 |
partition() | 返回元组,其中的字符串被分为三部分。 |
replace() | 返回字符串,其中指定的值被替换为指定的值。 |
rfind() | 在字符串中搜索指定的值,并返回它被找到的最后位置。 |
rindex() | 在字符串中搜索指定的值,并返回它被找到的最后位置。 |
rjust() | 返回字符串的右对齐版本。 |
rpartition() | 返回元组,其中字符串分为三部分。 |
rsplit() | 在指定的分隔符处拆分字符串,并返回列表。 |
rstrip() | 返回字符串的右边修剪版本。 |
split() | 在指定的分隔符处拆分字符串,并返回列表。 |
splitlines() | 在换行符处拆分字符串并返回列表。 |
startswith() | 如果以指定值开头的字符串,则返回 true。 |
strip() | 返回字符串的剪裁版本。 |
swapcase() | 切换大小写,小写成为大写,反之亦然。 |
title() | 把每个单词的首字符转换为大写。 |
translate() | 返回被转换的字符串。 |
upper() | 把字符串转换为大写。 |
zfill() | 在字符串的开头填充指定数量的 0 值。 |
布尔值为False的值包括:False None 0 “” () [] {}——即对象带有__len__函数的类生成的,且该函数返回0或False
运算符
和<<都是位运算符,<<高位丢弃、低位补零——记忆:左移是乘,右移是除
a = 2
print(a << 3) # 相当于a 乘2的3次方
a = 32
print(a >> 3) # 相当于a 除2的3次方
身份运算符
成员运算符
python集合(数组)
***列表(List)***是一种有序和可更改的集合。允许重复的成员
thislist = list(("apple", "banana", "cherry")) # 请注意双括号
print(thislist)# ['apple', 'banana', 'cherry']
方法 | 描述 |
---|---|
append() | 在列表的末尾添加一个元素 |
clear() | 删除列表中的所有元素 |
copy() | 返回列表的副本 |
count() | 返回具有指定值的元素数量。 |
extend() | 将列表元素(或任何可迭代的元素)添加到当前列表的末尾 |
index() | 返回具有指定值的第一个元素的索引 |
insert() | 在指定位置添加元素 |
pop() | 删除指定位置的元素 |
remove() | 删除具有指定值的项目 |
reverse() | 颠倒列表的顺序 |
sort() | 对列表进行排序 |
***元组(Tuple)***是一种有序且不可更改的集合。允许重复的成员
x = ("apple", "banana", "cherry")
y = list(x)
y[1] = "kiwi"
x = tuple(y)
print(x)
方法 | 描述 |
---|---|
count() | 返回元组中指定值出现的次数。 |
index() | 在元组中搜索指定的值并返回它被找到的位置 |
***集合(Set)***是一个无序和无索引的集合。没有重复的成员
方法 | 描述 |
---|---|
add() | 向集合添加元素。 |
clear() | 删除集合中的所有元素。 |
copy() | 返回集合的副本。 |
difference() | 返回包含两个或更多集合之间差异的集合。 |
difference_update() | 删除此集合中也包含在另一个指定集合中的项目。 |
discard() | 删除指定项目。 |
intersection() | 返回为两个其他集合的交集的集合。 |
intersection_update() | 删除此集合中不存在于其他指定集合中的项目。 |
isdisjoint() | 返回两个集合是否有交集。 |
issubset() | 返回另一个集合是否包含此集合。 |
issuperset() | 返回此集合是否包含另一个集合。 |
pop() | 从集合中删除一个元素。 |
remove() | 删除指定元素。 |
symmetric_difference() | 返回具有两组集合的对称差集的集合。 |
symmetric_difference_update() | 插入此集合和另一个集合的对称差集。 |
union() | 返回包含集合并集的集合。 |
update() | 用此集合和其他集合的并集来更新集合。 |
***词典(Dictionary)***是一个无序,可变和有索引的集合。没有重复的成员
{},拥有键和值
访问项目:在方括号内引用其键名来访问字典的项目;get()方法
引用其键名来更改特定项的值
for直接循环遍历字典时返回的是字典的键
for x in thisdict:
print(thisdict[x])
或
for x in thisdict.values():
print(x)
items()遍历键和值
for x, y in thisdict.items():
print(x, y)
dict2
只是对 dict1
的引用,而 dict1
中的更改也将自动在 dict2
中进行;因此需要使用copy()内建方法进行复制thisdict = dict(brand="Porsche", model="911", year=1963)
# 请注意,关键字不是字符串字面量(区别于之间赋值)
# 请注意,使用了等号而不是冒号来赋值
print(thisdict)
方法 | 描述 |
---|---|
clear() | 删除字典中的所有元素 |
copy() | 返回字典的副本 |
fromkeys() | 返回拥有指定键和值的字典 |
get() | 返回指定键的值 |
items() | 返回包含每个键值对的元组的列表 |
keys() | 返回包含字典键的列表 |
pop() | 删除拥有指定键的元素 |
popitem() | 删除最后插入的键值对 |
setdefault() | 返回指定键的值。如果该键不存在,则插入具有指定值的键。 |
update() | 使用指定的键值对字典进行更新 |
values() | 返回字典中所有值的列表 |
注:上述无特殊说明皆可以前类类比
条件语句
循环语句
for循环
for x in "banana":
print(x)#用于循环遍历banana的字母(每行一个字母)
函数
def my_function(country = "China"):
print("I am from " + country)
def my_function(*kids):
print("The youngest child is " + kids[2])
my_function("Phoebe", "Jennifer", "Rory")
Lambda
lambda arguments : expression
x = lambda a, b : a * b
print(x(5, 6))#一个 lambda 函数,它把参数 a 与参数 b 相乘并打印结果
def myfunc(n):
return lambda a : a * n
mydoubler = myfunc(2)
print(mydoubler(11))
数组
方法 | 描述 |
---|---|
append() | 在列表的末尾添加一个元素 |
clear() | 删除列表中的所有元素 |
copy() | 返回列表的副本 |
count() | 返回具有指定值的元素数量。 |
extend() | 将列表元素(或任何可迭代的元素)添加到当前列表的末尾 |
index() | 返回具有指定值的第一个元素的索引 |
insert() | 在指定位置添加元素 |
pop() | 删除指定位置的元素 |
remove() | 删除具有指定值的项目 |
reverse() | 颠倒列表的顺序 |
sort() | 对列表进行排序 |
类 / 对象
创建类:class
创建对象:使用创建的类名()
init()函数
class Person:#创建名为 Person 的类,使用 __init__() 函数为 name 和 age 赋值
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("Bill", 63)
print(p1.name)
print(p1.age)
对象方法
self参数
self
参数是对类的当前实例的引用,用于访问属于该类的变量。不必被命名为 self
删除对象属性:del关键字
删除对象:del关键字
类定义不能为空,但是如果您处于某种原因写了无内容的类定义语句,请使用 pass 语句来避免错误
继承
class Student(Person):#创建一个名为 Student 的类,它将从 Person 类继承属性和方法
pass
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year
x = Student("Elon", "Musk", 2019)
#添加 year 参数,并在创建对象时传递正确的年份:
迭代器
iter()
方法mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
class MyNumbers:#创建一个返回数字的迭代器,从 1 开始,每个序列将增加 1(返回 1、2、3、4、5 等)
def __iter__(self):#可以执行操作(初始化等),但必须始终返回迭代器对象本身
self.a = 1
return self
def __next__(self):#允许您执行操作,并且必须返回序列中的下一个项目
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):#添加终止条件引发错误
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
作用域
x = 100
def myfunc():
global x
x = 200
myfunc()
print(x)#200
python模块
创建模块
.py
的文件中使用模块
import mymodule#导入名为 mymodule 的模块(对应mymodule.py文件)
mymodule.greeting("Bill")#调用模块中的函数
模块可以包含已经描述的函数,但也可以包含各种类型的变量(数组、字典、对象等)
重命名模块:as
dir()函数:列出模块中的所有函数名(变量名)
from 仅从模块导入部件
在使用 from 关键字导入时,请勿在引用模块中的元素时使用模块名称。示例:person1[“age”],而不是 mymodule.person1[“age”]
日期
import datetime#显示当前日期
x = datetime.datetime.now()#包含年、月、日、小时、分钟、秒和微秒
print(x)
print(x.year)#显示年份
print(x.strftime("%A"))#显示weekday的名称
import datetime
x = datetime.datetime(2020, 5, 17)#需要至少年月日三个参数
print(x)
strftime() 方法
把日期对象格式化为可读字符串的方法
指令 | 描述 | 实例 |
---|---|---|
%a | Weekday,短版本 | Wed |
%A | Weekday,完整版本 | Wednesday |
%w | Weekday,数字 0-6,0 为周日 | 3 |
%d | 日,数字 01-31 | 31 |
%b | 月名称,短版本 | Dec |
%B | 月名称,完整版本 | December |
%m | 月,数字01-12 | 12 |
%y | 年,短版本,无世纪 | 18 |
%Y | 年,完整版本 | 2018 |
%H | 小时,00-23 | 17 |
%I | 小时,00-12 | 05 |
%p | AM/PM | PM |
%M | 分,00-59 | 41 |
%S | 秒,00-59 | 08 |
%f | 微妙,000000-999999 | 548513 |
%z | UTC 偏移 | +0100 |
%Z | 时区 | CST |
%j | 天数,001-366 | 365 |
%U | 周数,每周的第一天是周日,00-53 | 52 |
%W | 周数,每周的第一天是周一,00-53 | 52 |
%c | 日期和时间的本地版本 | Mon Dec 31 17:41:00 2018 |
%x | 日期的本地版本 | 12/31/18 |
%X | 时间的本地版本 | 17:41:00 |
%% | A % character | % |
JSON
import json
# 一些 JSON:
x = '{ "name":"Bill", "age":63, "city":"Seatle"}'
# 解析 x:
y = json.loads(x)
# 结果是 Python 字典:
print(y["age"])
import json
# Python 对象(字典):
x = {
"name": "Bill",
"age": 63,
"city": "Seatle"
}
# 转换为 JSON:
y = json.dumps(x)
# 结果是 JSON 字符串:
print(y)#{"name": "Bill", "age": 63, "city": "Seatle"}
Python | JSON |
---|---|
dict | Object |
list | Array |
tuple | Array |
str | String |
int | Number |
float | Number |
True | true |
False | false |
None | null |
json.dumps(x, indent=4, separators=(". ", " = "),sort_keys=True)
#indent参数定义缩进数,seperators更改分隔符(前两个分隔对象,第三个将键和值分隔开),sort_keys指定是否最结果排序
RegEx
函数 | 描述 |
---|---|
findall | 返回包含所有匹配项的列表 |
search | 如果字符串中的任意位置存在匹配,则返回 Match 对象;如果有多个匹配,则返回首个匹配项 |
split | 返回在每次匹配时拆分字符串的列表;可以使用maxsplit参数控制出现次数 |
sub | 用字符串替换一个或多个匹配项;可使用count参数控制替换次数 |
字符 | 描述 | 示例 |
---|---|---|
[] | 一组字符 | “[a-m]” |
\ | 示意特殊序列(也可用于转义特殊字符) | “\d” |
. | 任何字符(换行符除外) | “he…o” |
^ | 起始于 | “^hello” |
$ | 结束于 | “world$” |
* | 零次或多次出现 | “aix*” |
+ | 一次或多次出现 | “aix+” |
{} | 确切地指定的出现次数 | “al{2}” |
两者任一 | ||
() | 捕获和分组 |
字符 | 描述 | 示例 |
---|---|---|
\A | 如果指定的字符位于字符串的开头,则返回匹配项 | “\AThe” |
\b | 返回指定字符位于单词的开头或末尾的匹配项 | r"\bain"r"ain\b" |
\B | 返回指定字符存在的匹配项,但不在单词的开头(或结尾处) | r"\Bain"r"ain\B" |
\d | 返回字符串包含数字的匹配项(数字 0-9) | “\d” |
\D | 返回字符串不包含数字的匹配项 | “\D” |
\s | 返回字符串包含空白字符的匹配项 | “\s” |
\S | 返回字符串不包含空白字符的匹配项 | “\S” |
\w | 返回一个匹配项,其中字符串包含任何单词字符(从 a 到 Z 的字符,从 0 到 9 的数字和下划线 _ 字符) | “\w” |
\W | 返回一个匹配项,其中字符串不包含任何单词字符 | “\W” |
\Z | 如果指定的字符位于字符串的末尾,则返回匹配项 | “Spain\Z” |
集合 | 描述 |
---|---|
[arn] | 返回一个匹配项,其中存在指定字符(a,r 或 n)之一 |
[a-n] | 返回字母顺序 a 和 n 之间的任意小写字符匹配项 |
[^arn] | 返回除 a、r 和 n 之外的任意字符的匹配项 |
[0123] | 返回存在任何指定数字(0、1、2 或 3)的匹配项 |
[0-9] | 返回 0 与 9 之间任意数字的匹配 |
[0-5][0-9] | 返回介于 0 到 9 之间的任何数字的匹配项 |
[a-zA-Z] | 返回字母顺序 a 和 z 之间的任何字符的匹配,小写或大写 |
[+] | 在集合中,+、*、.、 |
span()
返回的元组包含了匹配的开始和结束位置.string
返回传入函数的字符串group()
返回匹配的字符串部分PIP
PyPI · The Python Package Index
Try Except
try
块允许您测试代码块以查找错误except
块允许您处理错误finally
块允许您执行代码,无论 try 和 except 块的结果如何raise
抛出(引发)异常,能够定义所引发异常的类型、以及打印给用户的文本命令行输入
字符串格式化
price = 52
txt = "The price is {} dollars"
print(txt.format(price))
txt = "The price is {:.2f} dollars" #化为带有两位小数的数字
文件处理
文件打开
open()
函数有两个参数:文件名和模式
"r"
- 读取 - 默认值。打开文件进行读取,如果文件不存在则报错"a"
- 追加 - 打开供追加的文件,如果不存在则创建该文件"w"
- 写入 - 打开文件进行写入,如果文件不存在则创建该文件"x"
- 创建 - 创建指定的文件,如果文件存在则返回错误"t"
- 文本 - 默认值。文本模式b"
- 二进制 - 二进制模式(例如图像)文件读取
f = open("demofile.txt", "r")
for x in f:
print(x)
文件写入
open()
函数添加参数:
"a"
- 追加 - 会追加到文件的末尾"w"
- 写入 - 会覆盖任何已有的内容"x"
- 创建 - 将创建一个文件,如果文件存在则返回错误"a"
- 追加 - 如果指定的文件不存在,将创建一个文件"w"
- 写入 - 如果指定的文件不存在,将创建一个文件文件删除
os.path.exists()