python_study
python基本语法规则
本文所有内容皆是基于w3school的学习笔记。
- 1 python 的作用
可以在服务器上使用 Python 来创建 Web 应用程序。
Python 可以与软件一起使用来创建工作流。
Python 可以连接到数据库系统。它还可以读取和修改文件。
Python 可用于处理大数据并执行复杂的数学运算。
Python 可用于快速原型设计,也可用于生产就绪的软件开发。
-
2 cmd编写python
-
3 if 语句
if 5>2:
print("5>2")
- (1)同一代码块中使用相同数量的空格,否则 Python 会出错
- (2)#注释
-
4 字符串:单引号和双引号皆可
- (1) “”""""赋值方式(三个双引号)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-
yjZAPnBY-1611893496718)(三引号赋值方式.png)]- (2)Python 没有字符数据类型,单个字符就是长度为 1 的字符串。
- (3)len()函数
a = "Hello, World!" print(len(a))
- (4) str.lower()
- (5) str.upper()
- (6) str.strip()
- (7) a = “Hello, World!” print(a.replace(“World”, “Kitty”))
- (8) a = “hello world” x = “llo” not in a # x = True
-
5 命名规则
变量名必须以字母或下划线字符开头
变量名称不能以数字开头
变量名只能包含字母数字字符和下划线(A-z、0-9 和 _)
变量名称区分大小写(age、Age 和 AGE 是三个不同的变量)
-
6 多个变量同行赋值
- x, y, z = “Orange”, “Banana”, “Cherry”
-
7 print
- print("hello "+“world”)
- print(10+“e”)#会出错
-
8 global 关键字
def myfunc():
global x
x = "fantastic"
myfunc()
print("Python is " + x)
- 9 数据类型
- 获取数据类型
x = 10 print(type(x))
文本类型: str
数值类型: int, float, complex
序列类型: list, tuple, range
映射类型: dict
集合类型: set, frozenset
布尔类型: bool
二进制类型: bytes, bytearray, memoryview
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aDkU29rA-1611893496719)(python数据类型.png)]
- 10 random模块
import random
print(random.randrange(1,10))
- 11 构造函数创建新变量
int() - 用整数字面量、浮点字面量构造整数(通过对数进行下舍入),或者用表示完整数字的字符串字面量
float() - 用整数字面量、浮点字面量,或字符串字面量构造浮点数(提供表示浮点数或整数的字符串)
str() - 用各种数据类型构造字符串,包括字符串,整数字面量和浮点字面量
-
12 字符串输出的format 的方法
- (1)format() 方法接受不限数量的参数,并放在各自的占位符中
quantity = 3 itemno = 567 price = 49.95 myorder = "I want {} pieces of item {} for {} dollars." print(myorder.format(quantity, itemno, price))
- (2)python内置方法
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 值。
-
13 值为False的表达式
bool(False)
bool(None)
bool(0)
bool("")
bool(())
bool([])
bool({})
- 14 isinstance()函数
x = 1
isinstance(x,int)
-
15 << >>运算符
- 10>>2 表示 10/(2^2)
- 10<<2 表示 10*2^2
-
16 python 身份运算符
x = 4
y = 4
x is y
-
17 成员资格运算符
- (1)
x = [1,2,3] 3 (not) in x
- (2)
if "apple" in thislist: print("Yes, 'apple' is in the fruits list")
-
18 python集合(数组)
列表(List)是一种有序和可更改的集合。允许重复的成员。
元组(Tuple)是一种有序且不可更改的集合。允许重复的成员。
集合(Set)是一个无序和无索引的集合。没有重复的成员。
词典(Dictionary)是一个无序,可变和有索引的集合。没有重复的成员
-
19 list方法
- (1) append
- (2) extend
- (3) len(list)
- (4) lst.insert(index,value)
- (5) lst.remove()
- (6) lst.pop(index)
- (7) del lst[index]/del lst
- (8) lst.clear()
- (9) 两个列表的连接方式
- 1 lst1 + lst2
- 2 lst1.extend(lst2)
- (10) 内建方法
append() 在列表的末尾添加一个元素 clear() 删除列表中的所有元素 copy() 返回列表的副本 count() 返回具有指定值的元素数量。 extend() 将列表元素(或任何可迭代的元素)添加到当前列表的末尾 index() 返回具有指定值的第一个元素的索引 insert() 在指定位置添加元素 pop() 删除指定位置的元素 remove() 删除具有指定值的项目 reverse() 颠倒列表的顺序 sort() 对列表进行排序
-
20 list的三种拷贝方式
- (1) 传地址
- y = x
- (2) lst的地址改变,但是内部成员指向的地址不变
- copy()
- y = list(x)
- (3) lst和其内部成员的地址都改变
- import copy as cp
- y = cp.deepcopy(x)
- (1) 传地址
-
21 tuple 元组
- (1) 不可更改
- (2) 可以转化为列表在进行更改
- (3) 单个元组的声明
x = ("apple",) # 注意逗号
- (4) 多个元组可以进行合并
tuple1 = ("a", "b" , "c") tuple2 = (1, 2, 3) tuple3 = tuple1 + tuple2
-
22 set 集合
- (1) 集合是无序的,不可以用下标读取
- (2) 可以for遍历
for x in thisSet: print(x)
- (3) set.add(value)
- (4) set.update(set)
thisset = {"apple", "banana", "cherry"} thisset.update({"orange", "mango", "grapes"})
- (5) set.remove(value)
- (6) set.discard(value) // 和remove作用相同
- (6) 还可以使用 pop() 方法删除项目
- 但此方法将删除最后一项。请记住,set 是无序的,因此您不会知道被删除的是什么项目。
- pop() 方法的返回值是被删除的项目。
- (7) set.clear()
- (8) 合并两个集合
set1 = {"a", "b" , "c"} set2 = {1, 2, 3} set3 = set1.union(set2) # union() 和 update() 都将排除任何重复项。
- (9) set 的内建方法
add() 向集合添加元素。 clear() 删除集合中的所有元素。 copy() 返回集合的副本。 difference() 返回包含两个或更多集合之间差异的集合。 difference_update() 删除此集合中也包含在另一个指定集合中的项目。 discard() 删除指定项目。 intersection() 返回为两个其他集合的交集的集合。 intersection_update() 删除此集合中不存在于其他指定集合中的项目。 isdisjoint() 返回两个集合是否有交集。 issubset() 返回另一个集合是否包含此集合。 issuperset() 返回此集合是否包含另一个集合。 pop() 从集合中删除一个元素。 remove() 删除指定元素。 symmetric_difference() 返回具有两组集合的对称差集的集合。 symmetric_difference_update() 插入此集合和另一个集合的对称差集。 union() 返回包含集合并集的集合。 update() 用此集合和其他集合的并集来更新集合。
-
23 dict python字典
- (1) thisdict = {“brand”: “Porsche”,“model”: “911”,“year”: 1963}
- (2) 通过“键-值”获取value
- x = thisdict[“model”]
- x = thisdict.get(“model”)
- (3) 键值对的读取
- thisdict.values()
- thisdict.keys()
- thisdict.items()
- (4) 新增键值对
- thisdict[“color”] = “red”
- (5) 删除项目
- thisdict.pop(“model”)
- popitem() 方法删除最后插入的项目:thisdict.popitem()
- del thisdict[“model”]
- (6) 拷贝
- dict2 = thisdict
- dict2 = thisdict.copy()
- dict2 = dict(thisdict)
- (7) dict 内建方法
clear() 删除字典中的所有元素 copy() 返回字典的副本 fromkeys() 返回拥有指定键和值的字典 get() 返回指定键的值 items() 返回包含每个键值对的元组的列表 keys() 返回包含字典键的列表 pop() 删除拥有指定键的元素 popitem() 删除最后插入的键值对 setdefault() 返回指定键的值。如果该键不存在,则插入具有指定值的键。 update() 使用指定的键值对字典进行更新 values() 返回字典中所有值的列表
-
24 if-elif-else
- (1)
a = 200 b = 66 if b > a: print("b is greater than a") elif a == b: print("a and b are equal") else: print("a is greater than b")
- (2) 单行if-else语句
- print(“A”) if a > b else print(“B”)
-
25 while-else 循环
i = 1
while i < 6:
print(i)
i += 1
else:
print("i is no longer less than 6")
-
26 for 循环
- (1)
for x in "banana": print(x)
- (2)
for x in range(3, 50, 6): print(x)
- (3) for-else
for x in range(10): print(x) else: print("Finally finished!")
- (4) for 语句不能为空,但如果处于某种原因写了无内容的 for 语句,则使用 pass 语句来避免错误。
for x in [0, 1, 2]: pass
-
27 python 函数
def my_function():
print("Hello from a function")
- (1) return
```
def my_function(x):
return 5 * x
```
- (2) key = value 语法发送参数。
```
def my_function(child3, child2, child1):
print("The youngest child is " + child3)
my_function(child1 = "Phoebe", child2 = "Jennifer", child3 = "Rory")
```
- (3) 任意参数:如果不知道将传递给您的函数多少个参数,则在函数定义的参数名称前添加 *。
这样,函数将接收一个参数元组,并可以相应地访问各项.
```
def my_function(*kids):
print("The youngest child is " + kids[2])
my_function("Phoebe", "Jennifer", "Rory")
```
- 28 lambda 函数
lambda arguments : expression
- (1) 把作为参数传入的数字加 10,然后打印结果
```
x = lambda a : a + 10
print(x(5))
```
- (2) lambda 函数可接受任意数量的参数
```
x = lambda a, b : a * b
```
- (3) 一个带一个参数的函数定义,并且该参数将乘以未知数字
```
def myfunc(n):
return lambda a : a * n
mydoubler = myfunc(2) # 这里myfunc(2) 就是2a
print(mydoubler(11))
```
- (4) 在同一程序中使用相同的函数定义来生成两个函数
```
def myfunc(n):
return lambda a : a * n
mydoubler = myfunc(2)
mytripler = myfunc(3)
print(mydoubler(11))
print(mytripler(11))
```
-
29 global关键字
- global 关键字使变量成为全局变量。
-
30 python模块
mymodule.py文件内容:
def func(name):
print(name)
person={"name": "Bill","age": 63,"country": "USA"}
---
import mymodule as m
m.func(“hello world”)
for i in m.person:
print(i)
---
导入部分
from mymodule import person
person[“age”]
- 31 显示时间
import datetime
x = datetime.datetime.now()
print(x)
x.strftime("%A") # ‘Thursday’
x.year
- (1) 创建日期对象
```
import datetime
x = datetime.datetime(2015,2,2,1,1,1)
print(x) # 2015-02-02 01:01:01
```
- (2) strftime()函数
![strftime函数](strftime函数.png)
- 32 显示已经安装的所有package
- pip list
- 33 try-except-else-finally
try:
print(x)
except:
print(“Something went wrong”)
else:
print(“this is else area”)
finally:
print(“The ‘try except’ is finished”)
- 34 raise语句
x = -1
if x<0:
raise Exception(“Number must greater than 0”)
- 35 字符串格式化
- (1) 格式占位符
```
price = 52
txt = "The price is {} dollars"
```
- (2) 格式化数字
```
txt = "The price is {:.2f} dollars"
```
- (3) 索引号(可是多次使用同一索引号)
```
quantity = 3
itemno = 567
price = 52
myorder = "I want {0} pieces of item number {1} for {2:.2f} dollars."
print(myorder.format(quantity, itemno, price))
```
- (4) 命名索引
```
myorder = "I have a {carname}, it is a {model}."
print(myorder.format(carname = "Porsche", model = "911"))
```
## python类
- 1 __init__(self)构造函数
- 2 一般函数
class Person:
def init(self, name, age):
mysillyobject.name = name
mysillyobject.age = age
def myfunc(self):
print("Hello my name is " + self.name)
- 3 self的改名
class Person:
def init(mysillyobject, name, age):
mysillyobject.name = name
mysillyobject.age = age
def myfunc(abc):
print("Hello my name is " + abc.name)
- 4 删除对象的属性
del p1.age
- 5 继承
class Person:
def init(self,fname,lname):
self.fname = fname
self.lname = lname
class Student(Person):
def init(self, fname, lname, year):
Person.init(self,fname, lname)
self.graduationyear = year
x = Student(“Elon”, “Musk”, 2019)
- 6 迭代器
- (1) 可迭代对象:列表、元组、字典、集合和字符串
- (2) 迭代方法:iter和next
```
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
```
- (3) for 循环实际上创建了一个迭代器对象,并为每个循环执行 next() 方法。
- (4) 创建迭代器
- 要把对象/类创建为迭代器,必须为对象实现 __iter__() 和 __next__() 方法。
- __iter__() 方法的作用相似,您可以执行操作(初始化等),但必须始终返回迭代器对象本身。
- __next__() 方法也允许您执行操作,并且必须返回序列中的下一个项目。
```
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
```
- (5) 在 __next__() 方法中,如果迭代完成指定的次数,我们可以添加一个终止条件来引发错误
- 为了防止迭代永远进行,我们可以使用 StopIteration 语句。
```
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
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
```
## JSON
- 1 定义
- JSON 是用于存储和交换数据的语法。
- JSON 是用 JavaScript 对象表示法(JavaScript object notation)编写的文本。
- 2 import json
- 3 json字符串: '{ "name":"Bill", "age":63, "city":"Seatle"}'
- (1) json.loads()函数:json字符串→字典
```
import json
x = '{ "name":"Bill", "age":63, "city":"Seatle"}'
y = json.loads(x)
print(y)
# {'name': 'Bill', 'age': 63, 'city': 'Seatle'}
```
- (2) json.dumps()函数:python字典→json字符串
- (3) 以下python对象可以转化为json字符串
```
dict list tuple string int float True False None
print(json.dumps({"name": "Bill", "age": 63}))
print(json.dumps(["apple", "bananas"]))
print(json.dumps(("apple", "bananas")))
print(json.dumps("hello"))
print(json.dumps(42))
print(json.dumps(31.76))
print(json.dumps(True))
print(json.dumps(False))
print(json.dumps(None))
```
- 4 json.dumps(x,indent=4) 实现转化为json字符串的缩进
import json
x = {
“name”: “Bill”,
“age”: 63,
“married”: True,
“divorced”: False,
“children”: (“Jennifer”,“Rory”,“Phoebe”),
“pets”: None,
“cars”: [
{“model”: “Porsche”, “mpg”: 38.2},
{“model”: “BMW M5”, “mpg”: 26.9}
]
}
print(json.dumps(x,indent=4))
- 5 改写分隔符
- 默认为:(", ", ": ")
- 改写为:json.dumps(x, indent=4, separators=(". ", " = "))
import json
x = {
“name”: “Bill”,
“age”: 63,
“married”: True,
“divorced”: False,
“children”: (“Jennifer”,“Rory”,“Phoebe”),
“pets”: None,
“cars”: [
{“model”: “Porsche”, “mpg”: 38.2},
{“model”: “BMW M5”, “mpg”: 26.9}
]
}
print(json.dumps(x, indent=4, separators=(". ", " = ")))
- 6 对结果进行排序
- json.dumps(x, indent=4, sort_keys=True)
## regex 正则表达式
- 1 import re
- 以china开头,以country结尾:x = re.search("^China.*country$", txt)
- findall 返回包含所有匹配项的列表
- search 如果字符串中的任意位置存在匹配,则返回 Match 对象
- split 返回在每次匹配时拆分字符串的列表
- sub 用字符串替换一个或多个匹配项
- 2 正则表达式语法
---
![正则表达式语法1](正则表达式.png)
![正则表达式语法2](正则表达式特殊序列.png)
![正则表达式语法3](正则表达式集合.png)
- 3 findall() 函数
- 4 search() 函数
- 如果有多个匹配,则仅返回首个匹配项
import re
str = “China is a great country”
x = re.search("\s", str)
print(x) #<re.Match object; span=(5, 6), match=’ '>
- 返回的是Match对象
- span()
- string
- group()
- 5 split() 函数
- x = re.split(regex, str, int) // int 表示分割的次数
- 6 sub() 函数
- x = re.sub("\s", "9", str, 2) // 2 是替换次数