#Python 迭代器
#迭代器是一种对象,该对象包含值的可计数数字。
#在 Python 中,迭代器是实现迭代器协议的对象,它包含方法 __iter__() 和 __next__()。
#从元组返回一个迭代器,并打印每个值:
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
#字符串也是可迭代的对象
mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
#也可以使用 for 循环遍历可迭代对象:
mytuple = ("apple", "banana", "cherry")
for x in mytuple:
print(x)
#用for迭代字符串中的字符:
mystr = "banana"
for x in mystr:
print(x)
#创建迭代器
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))
#StopIteration语句
#为了防止迭代永远进行,我们可以使用 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)
#Python 作用域
#在函数内部创建的变量在该函数内部可用:
def myfunc():
x = 100
print(x)
myfunc()
#能够从函数内的一个函数访问局部变量:
def myfunc():
x = 100
def myinnerfunc():
print(x)
myinnerfunc()
myfunc()
#函数外部创建的变量是全局变量,任何人都可以使用:
x = 100
def myfunc():
print(x)
myfunc()
print(x)
#如果函数内部有相同名字的变量
x = 100
def myfunc():
x = 200
print(x) #200 使用函数内部的
myfunc()
print(x) #100全局的
#Global 关键字
#如果使用 global 关键字,则该变量属于全局
def myfunc():
global x
x = 100
myfunc()
print(x)
#在函数内部更改全局变量的值,请使用 global 关键字引用该变量:
x = 100
def myfunc():
global x
x = 200
myfunc()
print(x)
#Python 模块
#模块是包含一组函数的文件,希望在应用程序中引用。
#如需创建模块,只需将所需代码保存在文件扩展名为 .py 的文件中:
#在名为 mymodule.py 的文件中保存代码:
def greeting(name):
print("Hello, " + name)
#在另外文件中导入名为 mymodule 的模块,并调用 greeting 函数:
import mymodule
mymodule.greeting("Bill")
#注释:如果使用模块中的函数时,请使用以下语法:
#module_name.function_name
#模块中的变量
#模块可以包含已经描述的函数,但也可以包含各种类型的变量(数组、字典、对象等):
#在文件 mymodule.py 中保存代码:
person1 = {
"name": "Bill",
"age": 63,
"country": "USA"
}
#在另个文件中导入名为 mymodule 的模块,并访问 person1 字典:
import mymodule
a = mymodule.person1["age"]
print(a)
#您可以在导入模块时使用 as 关键字创建别名:
import mymodule as mx
a = mx.person1["age"]
print(a)
#Python 中有一些内建模块,您可以随时导入。
import platform
x = platform.system()
print(x)
#dir() 函数
#一个内置函数可以列出模块中的所有函数名(或变量名)。dir() 函数:
#注释:dir() 函数可用于所有模块,也可用于您自己创建的模块
#列出属于 platform 模块的所有已定义名称:
import platform
x = dir(platform)
print(x)
#从模块导入
#您可以使用 from 关键字选择仅从模块导入部件。
#名为 mymodule 的模块拥有一个函数和一个字典:
def greeting(name):
print("Hello, " + name)
person1 = {
"name": "Bill",
"age": 63,
"country": "USA"
}
#仅从模块导入 person1 字典:
from mymodule import person1
print (person1["age"])
#Python 日期
import datetime
x = datetime.datetime.now()
print(x) #2024-04-29 00:41:08.220933
#返回 weekday 的名称和年份:
import datetime
x = datetime.datetime.now()
print(x.year)
print(x.strftime("%A"))
python里关于日期 合法格式代码的参考


Python 中的 JSON
#json转字典
import json
x = '{ "name":"Bill", "age":63, "city":"Seatle"}' # 一些 JSON:
y = json.loads(x) # 解析 x:
print(type(y)) #<class 'dict'>
print(y["age"]) # 结果是 Python 字典:
#把 Python 字典 转换为 JSON
import json
# Python 对象(字典):
x = {
"name": "Bill",
"age": 63,
"city": "Seatle"
}
# 转换为 JSON:
y = json.dumps(x)
# 结果是 JSON 字符串:
print(y)
#可以把以下类型的 Python 对象转换为 JSON 字符串:
#dict
#list
#tuple
#string
#int
#float
#True
#False
#None
#实例 将 Python 对象转换为 JSON 字符串,并打印值:
#看起来只有字典 转化得才是真正的json
import json
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))
#一个转换实例
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))
#上面的实例打印一个 JSON 字符串,但它不是很容易阅读,没有缩进和换行。
#json.dumps() 方法提供了令结果更易读的参数:
#使用 indent 参数定义缩进数:
json.dumps(x, indent=4)
#还可以定义分隔符,默认值为(", ", ": "),这意味着使用逗号和空格分隔每个对象,使用冒号和空格将键与值分开:
#使用 separators 参数来更改默认分隔符:
json.dumps(x, indent=4, separators=(". ", " = "))
#使用 sort_keys 参数来指定是否应对结果进行排序:
json.dumps(x, indent=4, sort_keys=True)
Python RegEx 正则表达式
#RegEx 或正则表达式是形成搜索模式的字符序列。
#RegEx 可用于检查字符串是否包含指定的搜索模式
#Python 提供名为 re 的内置包,可用于处理正则表达式。
#检索字符串以查看它是否以 "japan" 开头并以 "country" 结尾:
import re
txt = "japan is a great country"
x = re.search("^japan.*country$", txt)
if (x):
print("YES! We have a match!")
else:
print("No match")
re 模块提供了一组函数,允许我们检索字符串以进行匹配:

元字符 元字符是具有特殊含义的字符:



#findall() 函数
#findall() 函数返回包含所有匹配项的列表。
#打印所有匹配的列表:
import re
str = "japan is a great country"
x = re.findall("a", str)
print(x)
#如果未找到匹配,则返回空列表:
import re
str = "japan is a great country"
x = re.findall("USA", str)
print(x)
#search() 函数
#search() 函数搜索字符串中的匹配项,如果存在匹配则返回 Match 对象。
#如果有多个匹配,则仅返回首个匹配项:
#在字符串中搜索第一个空白字符:
import re
str = "japan is a great country"
x = re.search("\s", str)
print("The first white-space character is located in position:", x.start())
#如果未找到匹配,则返回值 None:
import re
str = "japan is a great country"
x = re.search("USA", str)
print(x)
#split() 函数
#split() 函数返回一个列表,其中字符串在每次匹配时被拆分:
#在每个空白字符处进行拆分:
import re
str = "China is a great country"
x = re.split("\s", str)
print(x)
#可以通过指定 maxsplit 参数来控制出现次数:
#仅在首次出现时拆分字符串:
import re
str = "japan is a great country"
x = re.split("\s", str, 1)
print(x)
#sub() 函数
#sub() 函数把匹配替换为您选择的文本:
import re
str = "japan is a great country"
x = re.sub("\s", "=", str)
print(x)
#可以通过指定 count 参数来控制替换次数:
#第4个参数控制替换次数
import re
str = "japan is a great country"
x = re.sub("\s", "=", str, 2)
print(x)
#Match 对象
#Match 对象是包含有关搜索和结果信息的对象。
#注释:如果没有匹配,则返回值 None,而不是 Match 对象。
#执行会返回 Match 对象的搜索:
import re
str = "japan is a great country"
x = re.search("a", str)
print(x) # 将打印一个对象
#Match 对象提供了用于取回有关搜索及结果信息的属性和方法:
#span() 返回的元组包含了匹配的开始和结束位置
#.string 返回传入函数的字符串
#group() 返回匹配的字符串部分#
#查找任何以J开头的单词
import re
str = "Japan is a great country"
x = re.search(r"\bJ\w+", str)
print(x.span()) #(0, 5)
#打印匹配的字符串部分。
import re
str = "Japan is a great country"
x = re.search(r"\bJ\w+", str)
print(x.group())
Python Try Except 错误处理
try:
print(x) #这里没定义 会有异常 会被try 捕获
except:
print("An exception occurred")
#多个异常
try:
print(x)
except NameError:
print("Variable x is not defined")
except:
print("Something else went wrong")
#else关健字
#如果没有异常才会执行else
try:
print("Hello")
except:
print("Something went wrong")
else:
print("Nothing went wrong")
#Finally关健字
#如果有finally 则无论 try 块是否引发错误,都会执行 finally 块。
try:
print(x)
except:
print("Something went wrong")
finally:
print("The 'try except' is finished")
#finally用例 无论如何都要关闭文件
try:
f = open("demofile.txt")
f.write("Lorum Ipsum")
except:
print("Something went wrong when writing to the file")
finally:
f.close()
#抛出异常 raise
x = -1
if x < 0:
raise Exception("Sorry, no numbers below zero")
#指定抛出的异常类型
x = "hello"
if not type(x) is int:
raise TypeError("Only integers are allowed")
Python 命令行输入 input
print("Enter your name:")
x = input()
print("Hello ", x)
Python 字符串格式化
#字符串 format()
#format() 方法允许您格式化字符串的选定部分。
price = 52
txt = "The price is {} dollars"
print(txt.format(price))
#将价格格式化为带有两位小数的数字:
txt = "The price is {:.2f} dollars"
#需使用更多值,只需向 format() 方法添加更多值:
quantity = 3
itemno = 567
price = 52
myorder = "I want {} pieces of item number {} for {:.2f} dollars."
print(myorder.format(quantity, itemno, price))
#索引号
#您可以使用索引号(花括号 {0} 内的数字)来确保将值放在正确的占位符中
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))
#如果要多次引用相同的值,请使用索引号:
age = 63
name = "Bill"
txt = "His name is {1}. {1} is {0} years old."
print(txt.format(age, name))
#命名索引
#您还可以通过在花括号 {carname} 中输入名称来使用命名索引,但是在传递参数值 txt.format(carname = "Ford") 时,必须使用名称
myorder = "I have a {carname}, it is a {model}."
print(myorder.format(carname = "Porsche", model = "911"))