网站备案要买备案号电商运营入门基础知识
web/
2025/10/5 3:08:50/
文章来源:
网站备案要买备案号,电商运营入门基础知识,网站建设360元起全包,广州做网站制作公司文章目录 一、安装pycharm 二、输入输出输出 print()文件输出#xff1a;格式化输出#xff1a; 输入input注释 三、编码规范四、变量保留字变量 五、数据类型数字类型整数浮点数复数 字符串类型布尔类型序列结构序列属性列表list #xff0c;有序多维列表列表推导式 元组tu… 文章目录 一、安装pycharm 二、输入输出输出 print()文件输出格式化输出 输入input注释 三、编码规范四、变量保留字变量 五、数据类型数字类型整数浮点数复数 字符串类型布尔类型序列结构序列属性列表list 有序多维列表列表推导式 元组tuple元素推导式 字典 无序通过映射函数创建字典通过关键字参数创建字典访问字典字典推导式解包操作符 集合无序可变去重创建集合添加和删除交集 并集 差集 字符串检索字符串格式化字符串 六、运算符算术运算符用于字符串 赋值运算符比较运算符逻辑运算符位运算符 七、条件if else八、循环forwhileconitue break 九、RegEx正则表达(Regular Expression)十、函数def函数形参 实参可变参数匿名函数/ lambda 函数 十一、全局变量 局部变量十二、模块导入模块标准模块外部模块安装__main\_\_模块导入__name__的理解 包第三方包 十、文件与IO文件操作打开文件写入文件关闭文件读取文件文件指针os.rename(src, dst)重命名文件或目录。os.remove(file)删除文件。os.rmdir(directory)删除空目录。os.removedirs(directory)递归删除目录及其所有子目录中的所有空目录。shutil模块中存在一个rmtree()函数用于递归删除目录以及目录中的所有文件和子目录。os.chmod(path, mode)更改文件或目录的权限模式。 目录操作路径目录使用os.path.exists() 来检查目录是否存在。使用 os.mkdir() 来创建单个目录。使用 os.makedirs() 来创建多级目录。如果上级目录不存在会一并创建所需的上级目录。使用 os.rmdir() 来删除目录。使用 os.walk() 来遍历目录中的子目录和文件。 十一、类 对象类__init\_\_()访问限制 十二、 装饰器将类方法转换为属性的装饰器函数装饰器类装饰器 十三、继承super() 十二、input十五、错误处理 try except finallyraise抛出异常assert 十六、zip lambda map十七、深拷贝deepcopy 浅拷贝copy十九、多核运算二十、tkinter二十一、python gui界面二十二、pickle存放数据二十六、datetime timedatetime.datetime.strptime()datetime.datetime.strftime() 一、安装
pycharm
debug工具栏
二、输入输出
输出 print()
2.7版本之前不用括号() 2.7之后需要括号
print(1)print(hello world)
print(hello world)print(applecar)
#打印需要加\
print(I\m m)
#int转换str
print(applestr(4))
print(13)
#转换小数用float
print(float(1.2)2)print(a,1)默认情况下每次调用print()函数都会在输出内容后添加换行符如果不希望换行可以使用end参数。
print(Hello,, end )
print(World!)ASCII码转换为字符使用ch() 字符转换为ASCII码的数字使用ord()
print(chr(97))文件输出
可以将输出内容写入到文件中通过file参数指定文件对象。
with open(output.txt, w) as f:print(Hello, File!, filef)格式化输出
使用 % 格式化字符串
name Alice
age 30
print(Name: %s, Age: %d % (name, age))使用 format 方法
name Bob
age 25
print(Name: {}, Age: {}.format(name, age))使用 f-stringPython 3.6
name Charlie
age 20
print(fName: {name}, Age: {age})指定宽度和对齐方式
name David
age 35
print({:10} {:5}.format(name, age))格式化数字
num 3.14159
print({:.2f}.format(num)) # 保留两位小数日期格式化输出
import datetime
now datetime.datetime.now()
print(now.strftime(Today is %Y-%m-%d %H:%M:%S))格式化字典用了解包操作符**将字典 person 中的键值对作为参数传递给format()方法然后在字符串模板中通过键名来引用对应的值
person {name: Eve, age: 28}
print(Name: {name}, Age: {age}.format(**person))多个值格式化
name Frank
age 22
height 175.5
print({0}s age is {1}, and his height is {2:.1f}.format(name, age, height))输入input
python 3.x中无论输入的是数字还是字符都是作为字符串读取
注释
单行注释
# 1多行注释 ...sdcc中文编码声明注释
# coding:utf-8
# codingutf-8三、编码规范
import一次导入一个模块不写分号每行不超过80字符避免在循环中使用或者连接字符串推荐将每个子字符串加入列表在循环结束后用join()连接列表
list []
for i in range(10):list.append(str(i % 16))
result .join(list)
print(type(result),type(list))命名规范 – 模块名使用小写字母使用下划线分割字母。 – 类名采用首字母大写的形式 – 模块内部的类采用下划线首字母大写的形式 – 函数、类的属性和方法命名使用小写字母使用下划线分割字母 – 常量命名采用全部大写字母 – 使用下划线_开头的模块名和函数名是受保护的import时不能导入 – 使用双下划线__开头的实例变量(实例变量是指属于类的实例的变量)或方法是类私有的 – 以双下划线__开头和结尾的是Python里专用的标识 – 区分大小写
四、变量
保留字
保留字区分大小写。if是保留字IF不是
#查看python的保留字
import keyword
print(keyword.kwlist)变量
type()获取变量的类型 id()获取变量的内存地址
五、数据类型
数字类型
整数
正整数、负整数、0
类型开头八进制0o或0O开头十六进制0x或0X开头二进制只有0、1无开头
a 18
print(a, hex(a), oct(a),bin(a))
print(a, hex(a)[2:], oct(a)[2:],bin(a)[2:])浮点数
复数
使用j或J表示虚部 34j
字符串类型
字符型前加上r将原样输出字符串
print(r30x4好好好)
30x4好好好布尔类型
序列结构
元组、字典、列表对比 1、 元组和列表的区别 1、元组是不可变序列不能单独修改元素 2、元组比列表处理和访问的速度快 3、列表不能作为字典的键元组可以 4、列表元组有序字典集合无序 2、 元组用或者不加 列表用[ ] 字典{key:value} 集合{} 3、推导式
r1 [random.randint(10, 100) for i in range(10)]
print(列表推导式, r1)
r2 (random.randint(10, 100) for i in range(10))
print(元组推导式, r2)
r2 tuple(r2)
print(元组推导式, r2)
r3 {i: random.randint(10, 100) for i in range(10)}
print(字典推导式, r3)输出
列表推导式 [32, 72, 80, 10, 66, 25, 52, 23, 11, 12]
元组推导式 generator object genexpr at 0x039B6030
元组推导式 (21, 45, 86, 65, 63, 43, 34, 74, 44, 83)
字典推导式 {0: 50, 1: 38, 2: 29, 3: 75, 4: 12, 5: 87, 6: 65, 7: 59, 8: 64, 9: 42}序列属性
索引可以是负数从右向左计数 倒数第一个元素是-1倒数第2个元素是-2以此类推
切片 a[start: end :step] 默认step是1 a[:]复制整个序列
序列连接用 ab
乘法重复序列
empty [None] * 5用in检查某个元素是否在序列中 not in检查不在序列中
len() max() min() list()序列转换为列表
enumerate()序列组合为一个索引序列。它用于将一个可迭代对象如列表、元组、字符串等转换为一个枚举对象同时返回索引和对应的值。还可以接收一个可选的 start 参数用于指定索引的起始值默认为 0。
my_list [apple, banana, orange]for index, value in enumerate(my_list, start1):print(fIndex: {index}, Value: {value})列表list 有序
函数作用list()将range()循环的结果转换为列表deldel list删除列表 del a[2]删除元素append()添加 a.append(1)insert()向指定位置插入元素extend()a.extend(b)将序列b追加到a序列后面count()元素出现的次数index()元素首次出现的下标sum()元素的和sum(list, start0) start可选参数表示计算总和的初始值默认为0。sort()原列表改变 sort(key,reverse ) key 参数允许你指定一个用于排序的自定义函数例如可以按照元素的某个属性来排序。reverse 参数用于指定是否按降序进行排序。默认是升序。True降序false升序sorted()原列表元素顺序不变
a [1,2,3,4]
#追加
a.append(0)
print(a)
#添加 inset(坐标数值)
a.insert(1,0)#a[1]0
a.remove(2)#移除第一个出现的2
print(a[-1])#列表最后一位的坐标用-1
print(a[-2],a[-3])#列表倒数第二个值倒数第三个值
print(a[0:3])#:表示从哪到哪
print(a[:3])
print(a[1:])
print(a.index(2))#列表中第一次出现的2的索引值
print(a.count(2))#列表中出现2的次数
#默认从小到大排序并覆盖掉原来的数据
print(a.sort())
#排序顺序为从大到小
a.sort(reversTrue)
print(a)# 定义一个包含学生信息的列表
students [{name: Alice, age: 25},{name: Bob, age: 22},{name: Eve, age: 28}
]
# 按照年龄从大到小进行排序
students.sort(keylambda x: x[age], reverseTrue)
print(students) # 输出结果为 [{name: Eve, age: 28}, {name: Alice, age: 25}, {name: Bob, age: 22}]多维列表
用模块numpy pandas
a_multi [[1.2.3],[2,3,4],[3,4,5]]
print(a[0][1])列表推导式
用于根据现有可迭代对象创建新的列表。
original_list [1, 2, 3, 4, 5]
squared_list [x**2 for x in original_list]
print(squared_list) # 输出结果为 [1, 4, 9, 16, 25]original_list [1, 2, 3, 4, 5]
filtered_list [x**2 for x in original_list if x % 2 0]
print(filtered_list) # 输出结果为 [4, 16]元组tuple
元组用或者不加 列表用[ ]
a_tuple (1,2,3,4)
b_tuple 1,2,3,4
c (1,) 单独的元素要加,a_list [1,2,3,4]for content in a_list:print(content)for i range(len(a_list)):print(i, a_list[1])元组的连接必须是元组使用
元素推导式
可以使用生成器表达式来模拟类似于元组推导式的行为使用 tuple() 函数将生成器对象转换为元组
# 使用生成器表达式来生成包含平方数的元组
squared_tuple tuple(x**2 for x in range(1, 5)) # 生成器对象
print(squared_tuple) # 输出结果为 (1, 4, 9, 16)在 Python 中生成器是一种迭代器它只能被遍历一次。
# 使用生成器表达式创建生成器对象
generator (x**2 for x in range(1, 5))# 打印生成器对象的内容
for item in generator:print(item)
print(tuple(generator)) # 输出是() 为空
# 将生成器对象转换为列表
result_list list((x**2 for x in range(1, 5)))# 将列表转换为元组
result_tuple tuple(result_list)print(result_tuple) # 输出结果为 (1, 4, 9, 16)字典 无序
由key value组成键必须唯一键必须不可变只能是数字、字符串、元组
# 空字典
dic {}
dic dict()d {apple:1,pear:2,orange:3,1:a,b:c}
print(d[apple])
del d[pear]#删除元素
print(d)
d[2]20 #添加元素
print(d)
d {apple:1,pear:{1:3,3:a}}#字典中包含字典
print(d[pear][3])# 删除字典
del dict
# 清空字典
dict.clear()通过映射函数创建字典 zip()将列表或元组合成字典 keys [a, b, c]
values [1, 2, 3]# 使用 zip() 函数将两个列表合并为一个字典
result_dict dict(zip(keys, values))print(result_dict)
{a: 1, b: 2, c: 3}通过关键字参数创建字典
# 使用 fromkeys() 创建字典
keys [a, b, c]
my_dict dict.fromkeys(keys)
print(my_dict)
{a: None, b: None, c: None}# 使用 fromkeys() 创建字典
keys [a, b, c]
default_value 0 # 默认值my_dict dict.fromkeys(keys, default_value)print(my_dict)
{a: 0, b: 0, c: 0}keys (a, b, c)
value [a, b, c]
dict {keys:value}
print(dict)
{(a, b, c): [a, b, c]}访问字典
dic.get(key,[default]) 如果key不在字典则返回default
dic.items()获取键值对列表
keys (a, b, c)
value [a, b, c]
dic dict(zip(keys,value))
print(dic)
print(dic.items())
print(dic.keys())
print(dic.values())
for items in dic.items():print(items)
for key in dic.keys():print(key)输出
{a: a, b: b, c: c}
dict_items([(a, a), (b, b), (c, c)])
dict_keys([a, b, c])
dict_values([a, b, c])
(a, a)
(b, b)
(c, c)
a
b
c字典推导式
解包操作符
解包操作符**通常用于将字典中的键值对解包为关键字参数传递给函数或方法。
解包字典传递参数
def greet(name, age):print(Hello, {}! You are {} years old..format(name, age))person {name: Alice, age: 30}
greet(**person)
输出结果为
Hello, Alice! You are 30 years old.与其他参数结合使用
def greet(prefix, name, suffix):print({} {} {}.format(prefix, name, suffix))person {name: Bob}
greet(Hello,, **person, suffix!)
输出结果为
Hello, Bob !字典合并
dict1 {a: 1, b: 2}
dict2 {c: 3, d: 4}
merged_dict {**dict1, **dict2}
print(merged_dict)
输出结果为
{a: 1, b: 2, c: 3, d: 4}集合无序可变去重
创建集合 使用大括号 {} 和逗号 , 将元素括起来可以直接使用大括号和逗号来定义集合。例如my_set {1, 2, 3, 4, 5} 使用 set() 函数可以使用 set() 函数来创建集合可以传入一个可迭代对象作为参数例如列表、元组、字符串等。例如
my_list [6, 3, 9, 0, 1, 2, 3, 4, 5, 4]#列表
my_set set(my_list)
print(my_set) # {0, 1, 2, 3, 4, 5, 6, 9} 默认都是升序排列my_list [6, 3, 9, 0, 1, 2, 3, 4, 5, 4] #字符串
my_set set(my_list)
print(my_set)创建空集合要创建空集合不能使用 {}因为这样会创建一个空字典而是要使用 set() 函数来创建空集合。例如empty_set set()
添加和删除
添加 set.add(element) 删除集合 del set 删除元素 set.remove(element) set.pop() 清空集合 set,clear()
pop()随机移除返回这个被移除的元素。但是实际运行移除的都是第一个元素my_list [0, 1, 2, 3, 4, 5]
my_set set(my_list)
a my_set.pop()
print(my_set, a)交集 并集 差集
set1 {1, 2, 3, 4, 5}
set2 {3, 4, 5, 6, 7}
intersection set1 set2 或者使用 intersection set1.intersection(set2)
union set1 | set2 或者使用 union set1.union(set2)
difference set1 - set2 或者使用 difference set1.difference(set2)a [a,b,b,c,c]
print(set(a))
print(type(set(a)))
s Welcome to my world
print(set(s))
unique set(s)
unique.add(a)
#unique.add([b,x])#不能加列表
unique.clear()
unique.remove(x)#函数返回值不是set是None如果remove的元素不存在会报错
unique.discard(y)#如果remove的元素不存在不会报错会返回原有的set
print(unique)print(a.difference(unique))#不同的地方,seta-unique
print(a.intersection(unique))#相同的元素字符串
功能方法拼接 不允许和其他类型拼接长度len() 所有字符均默认为1个长度utf-8中1个汉字3个字节len(str.encode())得到字节数切片str[start : end: step]分割str.split(sep, maxsplit)把字符串分割为列表如果不指定sep分隔符那么也不能指定maxsplit大写字母转小写字母str.lower()如果没有字符转化返回原字符串否则返回新字符串小写字母转大写字母str.upper()去除字符串中的空格和特殊字符\t \r \nstr.strip([chars])str.lstrip([chars])str.rstrip([chars])判断字符串中是否只包含数字字符。如果字符串中的每个字符都是数字则返回 True否则返回 False。str.isdigit()
检索字符串
str.count(sub[,start[,end]]) str.find(sub[,start[,end]]) str.rfind(sub[,start[,end]]) 从右查找 str.index(sub[,start[,end]]) str.rindex(sub[,start[,end]]) 从右查找 str.startwith(sub[,start[,end]])是否以什么开头 str.endwith(sub[,start[,end]])以什么结尾
格式化字符串
使用了大括号{}来表示我们想要插入值的位置。在大括号内部:后面的部分表示了格式化的方式。在这个例子中{:09s}表示将值格式化为长度为9的字符串若不够9位则在左边用0进行填充。{}表示将值格式化为字符串类型。 我们将实际要插入的值作为参数传入。在这里7’插入了第一个位置百度’插入了第二个位置baidu’插入了第三个位置。然后str.format()方法会将这些值插入到模板字符串中并返回格式化后的结果存储在变量content中。
template 编号{:09s}\t公司名称: {:s} \t官网 http://www.{:s}.com
content template.format(7, 百度, baidu)
print(content) # 编号000000007 公司名称: 百度 官网 http://www.baidu.com六、运算符
算术运算符
加法减法-乘法*除法/ 总是返回浮点数取整除法// 返回不大于结果的最大整数求余数%【第二个被除数是负数结果也是负数】指数运算**
# 加法
result1 5 3 # 结果为 8# 减法
result2 7 - 2 # 结果为 5# 乘法
result3 4 * 6 # 结果为 24# 除法
result4 10 / 5 # 结果为 2.0 总是返回浮点数# 取整除法
result5 17 // 3 # 结果为 5 返回不大于结果的最大整数# 求余数
result6 10 % 3 # 结果为 1 10 除以 3 的余数# 指数运算
result7 2 ** 5 # 结果为 32 2 的 5 次方用于字符串
指定重复次数
print(3**)赋值运算符
等号加法赋值减法赋值-乘法赋值*除法赋值/取整除法赋值//求余数赋值%指数赋值**
# 等号
x 10 # 将值 10 赋给变量 x# 加法赋值
x 5 # 等同于 x x 5# 减法赋值
x - 3 # 等同于 x x - 3# 乘法赋值
x * 2 # 等同于 x x * 2# 除法赋值
x / 4 # 等同于 x x / 4# 取整除法赋值
x // 3 # 等同于 x x // 3# 求余数赋值
x % 2 # 等同于 x x % 2# 指数赋值
x ** 3 # 等同于 x x ** 3比较运算符
相等不相等!大于小于大于等于小于等于
# 相等
result1 5 5 # 结果为 True# 不相等
result2 8 ! 3 # 结果为 True# 大于
result3 10 7 # 结果为 True# 小于
result4 4 2 # 结果为 False# 大于等于
result5 6 6 # 结果为 True# 小于等于
result6 9 3 # 结果为 False逻辑运算符
and与or 或not 非
位运算符
按位与按位或|按位异或^按位取反~左移右移
# 按位与
result1 5 3 # 结果为 1# 按位或
result2 5 | 3 # 结果为 7# 按位异或
result3 5 ^ 3 # 结果为 6# 按位取反
result4 ~5 # 结果为 -6# 左移
result5 5 1 # 结果为 10# 右移
result6 5 1 # 结果为 2七、条件if else
if not 代表后面的表达式为false执行下面的语句 if x is not None是最好的写法【为啥】
可以多变量连续比较
x1
y2
z3
if xyz:print(xyz)
x1
y2
z0
if xyz:print(xyz)if xy:print(xy)
elif xy:print(xy)
else:print(xy)简写
b a if a0 else -a八、循环
for
【注意】for条件后需要加冒号 改变结构的快捷键ctrl[
range是左闭右开range(1,3)是【12】
example_list [1,2,3,4,5,6,7,12]
for i in example_list:print(i)for i in range(1,3):print(i)for i in range(1,10,2):print(i)while
【注意】while 条件后需要加冒号
condition 1
while condition10:print(conditon)conditon condition1conitue break
break跳出循环 continue跳到下一次循环
while True:ainput(input int:)if a 1:breakelse:pass
while True:ainput(input int:)if a 1:continueelse:pass九、RegEx正则表达(Regular Expression)
主要用于网页爬虫
()用于创建一个捕获组 可以用来对一个子模式进行分组以便后续可以对这个组内的内容进行匹配或提取可以用于指定一组模式中的选择项。例如 (a|b) 表示匹配 a 或 b。 []用于创建一个字符集 可以指定一个字符集中允许的字符例如 [abc] 表示匹配字符 a、b、c 中的任意一个。可以使用范围表示比如 [0-9] 表示匹配任意一个数字字符。可以指定字符集的取反用 ^例如 [^abc] 表示匹配除了 a、b、c 之外的任意字符。 {}用于指定匹配重复次数。 可以用来指定一个模式重复出现的次数比如 {3} 表示匹配 3 次{2,4} 表示匹配 2 到 4 次。可以指定具体的次数也可以指定范围。一般与 *、、? 等修饰符一起使用用来控制重复匹配的次数。
import re
#简单python匹配
pattern1cat
pattern2bird
strting a cat
print(pattern1 in string)
print(pattern2 in string)
#正则寻找配对
pattern1cat
pattern2bird
strting a cat
print(re.search(pattern1,string))
print(re.search(pattern2,string))#匹配run or ran
ptn r[au]n#没有r只是普通的表达式
ptn rr[au]n#有r表示是一个表达式
ptn2 rr[0-9a-z]n#中间的数可能是0-9的数字或者a-z的小写
print(re.search(ptn,a cat runs))特殊种类匹配
#数字 \d所有数字形式
print(re.search(rr\dn,a cat r4ns))
#\D不是数字的形式
print(re.search(rr\Dn,a cat runs))#空白
#\s任意空白符的键\t \n \r \f \v
print(re.search(rr\sn,r\nn r4ns))
#\S不是空白符的形式
print(re.search(rr\Sn,r\nn r4ns))#所有字母、数字、“_”
#\wa-z 0-9 _
print(re.search(rr\wn,r\nn r4ns))
#\W相反意义
print(re.search(rr\Wn,r\nn r4ns))#空白字符
#\b字符的前后空白符才匹配
print(re.search(r\bruns\b,dog runs to cat))
print(re.search(r\bruns\b,dog runs to cat))
#\B字符前后的空白符不限量
print(re.search(r\B runs \B,dog runs to cat))#特殊字符 任意字符
#\\匹配\
print(re.search(rruns\\,dog runs\ to cat))
#.匹配任意字符除了\n
print(re.search(rr.n,dog r[uns to cat))#句尾句首
^匹配句首
print(re.search(r^dog,dog runs to cat))
$匹配句尾
print(re.search(rcat$,dog runs to cat))匹配前面的子表达式零次或一次。
print(re.search(rMon(day)?,Monday))
print(re.search(rMon(day)?,Mon))多行匹配
string
dog runs to cat.
I run to dog.print(re.search(r^I,string))
print(re.search(r^I,string,flagsre.M))*0次或多次匹配
print(re.search(rab*,a))
print(re.search(rab*,abbb))
1次或多次
print(re.search(rab,a))
print(re.search(rab,abbb))
{n,m}指定次数匹配
print(re.search(rab{2,10},a))
print(re.search(rab{2,10},abbb))group数组
match re.search(r(\d).Date(.),ID1,Date28/02/2024)
print(match.group()) #打印所有的匹配的句子
print(match.group(1)) #打印所有的匹配的第一个
print(match.group(2)) #打印所有的匹配的第二个
match re.search(r(?Pid\d).Date(?Pdate.),ID1,Date28/02/2024)
print(match.group(id)) #打印命名为id的部分
print(match.group(date)) #打印命名为date的部分寻找所有匹配findall
print(re.findall(rr[au]n,run ran ren))
|或
print(re.findall(rran|run,run ran ren))
print(re.findall(rr(a|u)n,run ran ren))
替换
print(re.sub(rran|run,catches,run ran ren))
分裂
print(re.split(r[,;\.],a,b;c.d))#以, ; .分割元素由于.表示任意字符所以需要加转义\
编译compile
com re.compile(rr[au]n)
print(com.research(dog runs to cat))?、?、?!、?!
exp1(?exp2)查找 exp2 前面的 exp1。
(?exp2)exp1查找 exp2 后面的 exp1。
exp1(?!exp2)查找后面不是 exp2 的 exp1。
(?!exp2)exp1查找前面不是 exp2 的 exp1。所以pattern匹配的是后面的exp1matches匹配的是a_后面跟的数字
举例 match[0]是正则表达式匹配的结果是一个包含年、月、日信息的元组例如(2024, 02, 28)。 year, month, day match[0]中的year、month和day是左侧的目标变量它们会按照元组中元素的顺序依次接收对应的值。
import re# 定义包含日期信息的字符串
date_string 2024-02-28# 定义匹配日期信息的正则表达式模式利用()创建捕获组来分别匹配年、月、日
pattern r(\d{4})-(\d{2})-(\d{2})# 使用 re 模块的 findall() 方法匹配字符串中的模式
match re.findall(pattern, date_string)# 输出匹配结果
if match:year, month, day match[0]print(Year:, year)print(Month:, month)print(Day:, day)
else:print(No match)十、函数
def函数
def func(b):a12bprint(a)
#调用函数
func()def sale_car(price,color,brand):print(price,price,color,color,brand,brand)
sale_car(100,red,bmw)
#默认值定义好的参数统一放在后面
def sale_car(price,color,brandbmw):print(price,price,color,color,brand,brand)
sale_car(100,red)形参 实参
如果传递的是可变对象如列表、字典等函数内部的修改会影响原始对象 如果传递的是不可变对象如整数、字符串等函数内部的修改不会影响原始对象。
值传递字符串不可变对象 引用传递列表可变对象
可变参数
可变参数指的是函数在定义时可以接受任意数量的参数。有两种类型的可变参数
*args *args 允许函数接受任意数量的位置参数这些参数会被收集到一个元组中传递给函数。
def my_func(*args):for arg in args:print(arg)my_func(1, 2, 3) # 输出 1 2 3list [1,2,3]
my_func(*list)kwargs kwargs 允许函数接受任意数量的关键字参数这些参数会被收集到一个字典中传递给函数。
def my_func(**kwargs):for key, value in kwargs.items():print(key, value)my_func(a1, b2, c3) # 输出 a 1, b 2, c 3def my_func(*args, **kwargs):for arg in args:print(arg)for key, value in kwargs.items():print(key, value)my_func(1, 2, 3, a4, b5) # 输出 1 2 3, a 4, b 5匿名函数/ lambda 函数
lambda arguments: expressionadd lambda x, y: x y
print(add(3, 5)) # 输出 8filter() 函数用于过滤序列返回一个由使得函数返回值为 True 的元素所组成的迭代器。 语法filter(function, iterable)
numbers [1, 2, 3, 4, 5]
filtered_nums filter(lambda x: x % 2 0, numbers)
print(list(filtered_nums)) # 输出 [2, 4]map() 函数用于对序列中的每个元素应用函数返回一个由应用函数后的结果组成的迭代器。 语法map(function, iterable)
示例
numbers [1, 2, 3, 4, 5]
squared_nums map(lambda x: x ** 2, numbers)
print(list(squared_nums)) # 输出 [1, 4, 9, 16, 25]十一、全局变量 局部变量
全局通常以全部大写定义变量名
A 1
app None
def func():global appapp10return app
print(app)
print(func())
print(app)十二、模块
模块文件的扩展名必须是.py 使用模块可以避免函数名和变量名冲突的问题 使用包避免模块名冲突的问题
导入模块
import time
import time as t
print(time.localtime())
from time import localtime#只需要特定的功能
print(localtime())
from time imprt *#添加所有的功能检索模块查找的目录
import sys
print(sys.path)标准模块
os 模块提供了与操作系统进行交互的功能例如文件操作、目录操作、进程管理等。datetime 模块提供了处理日期和时间的功能包括日期时间对象的创建、格式化、计算以及时区相关操作等。time模块calendar模块math 模块提供了数学运算相关的函数例如数学常量、数学函数、对数函数等。random 模块提供了生成随机数的功能包括伪随机数生成器、随机数种子相关等。json 模块提供了处理 JSON 格式数据的功能包括解析 JSON 数据、序列化 Python 对象为 JSON 字符串等。re 模块提供了对正则表达式的支持可以进行模式匹配、文本搜索、替换等操作。sys 模块提供了与 Python 解释器进行交互的功能可以访问解释器的变量和函数。collections 模块提供了额外的数据结构例如 OrderedDict、defaultdict、Counter 等用于扩展 Python 原生数据结构的功能itertools 模块提供了用于迭代操作的函数例如生成排列、组合、循环迭代等。urllib 模块提供了用于读取网上的数据、操作 URL 的功能例如发送 HTTP 请求、处理 URL 编码解码等。math模块提供了标准算数运算函数decimal模块
外部模块安装
sudo pip3 install numpy
sudo pip3 install numpy-1.9.2
#upgrade
sudo pip3 install -U numpy
sudo pip3 uninstall numpy
__main__
if __name__ __main__在 Python 中if name ‘main’: 是一个常见的语句用于检查当前脚本是否被直接执行。这个语句的含义是如果当前脚本被直接执行而不是被导入为模块那么执行紧随其后的代码块。
这种结构通常被用于使一个 Python 文件既可以被作为脚本直接运行又可以被其他脚本导入并调用其中的函数或类。这种做法很常见因为在 Python 中模块和脚本之间的区别很模糊同一个文件既可以是独立的脚本也可以是可重用的模块。
当 Python 解释器读取一个文件时它会将其中的代码执行一遍。如果一个文件被作为主程序直接运行name 的值会被设置为 ‘main’这样通过 if name ‘main’: 就可以执行特定于主程序的代码块。如果一个文件被导入为模块name 的值会被设置为该模块的名称而不是 ‘main’因此 if name ‘main’: 下面的代码块就不会执行。
模块导入
Python是一种解释型脚本语言在执行之前不同要将所有代码先编译成中间代码Python程序运行时是从模块顶行开始逐行进行翻译执行所以最顶层没有被缩进的代码都会被执行所以Python中并不需要一个统一的main()作为程序的入口。在某种意义上讲“if name’main:”也像是一个标志象征着Java等语言中的程序主入口告诉其他程序员代码入口在此——这是“if name’main:”这条代码的意义之一。
当我们把模块A中的代码在模块B中进行import A时只要B模块代码运行到该import语句模块A的代码会被执行。
# 模块Aa 100print(你好我是模块A……)print(a)# 模块Bfrom package01 import Ab 200print(你好我是模块B……)print(b)运行模块B时输出结果如下
你好我是模块A……
100
你好我是模块B……
200如果在模块A中我们有部分的代码不想在被导入到B时直接被运行但在直接运行A时可直接运行那该怎么做呢那就可以用到“if name’main:”这行代码了我们队上面用到的A模块代码进行修改
A模块代码修改为
# 模块Aa 100print(你好我是模块A……)if __name____main__:print(a)B模块不做修改直接执行B模块输出结果如下
你好我是模块A……
你好我是模块B……
200A模块中的a的值就没有再被输出了。所以当你要导入某个模块但又不想改模块的部分代码被直接执行那就可以这一部分代码放在“if name‘main’:”内部。
__name__的理解
__name__属性是Python的一个内置属性记录了一个字符串。
若是在当前文件name 是__main__。 在hello文件中打印本文件的__name__属性值显示的是__main__
若是导入的文件__name__是模块名。 test文件导入hello模块在test文件中打印出hello模块的__name__属性值显示的是hello模块的模块名。
因此__name__ ‘main’ 就表示在当前文件中可以在if name ‘main’:条件下写入测试代码如此可以避免测试代码在模块被导入后执行。
包
包Package是一种模块的组织方式可以将多个功能相近的模块组织在一起方便管理和引用。包内部可以包含多个模块文件通常还包括一个__init__.py 文件作为包的初始化文件。
包的结构 包是一个包含 init.py 文件的目录该目录下可以包含多个模块文件和子包子目录形成层级结构。 init.py 文件可以是空文件也可以包含初始化代码用于在导入包时执行一些初始化操作。 当导入包时init.py 文件会被执行其中可以定义包的属性、函数等内容。 Python 包的命名应该是小写字母和下划线的组合 如果你开发了一个功能强大的包可以考虑将其发布到 Python Package IndexPyPI
第三方包
NumPy提供了强大的多维数组对象和对应的操作函数是进行科学计算的基础包之一。Pandas提供了数据分析和数据处理的功能包括数据结构、数据清洗、数据分析等是处理结构化数据的重要工具。Matplotlib用于绘制图表和可视化数据支持各种类型的图形和绘图风格。Scikit-learn提供了各种机器学习算法和工具用于建模、数据预处理、模型评估等是机器学习领域的重要库之一。TensorFlow / PyTorch这两个包分别提供了深度学习框架支持构建神经网络模型、训练、推理等一系列深度学习相关操作。Django / Flask这两个是常用的 Web 框架用于快速搭建 Web 应用和 API。Requests提供了发送 HTTP 请求的简洁而友好的 API用于进行网络请求操作。Beautiful Soup用于解析 HTML 和 XML 文档提取信息的库常用于网页爬虫和数据抓取。PyQt / Tkinter这两个提供了创建图形用户界面GUI的工具包用于构建桌面应用程序。pytest提供了对 Python 代码进行单元测试的功能支持编写测试用例、执行测试、生成测试报告等。
十、文件与IO
文件操作
文件对象file
print(type(myfile))
将输出class _io.TextIOWrapper代表着一个文本文件的 I/O 包装器对象打开文件
aappend追加 a读写 wwrite只写w和a相关的参数文件存在则将其覆盖否则创建新文件 rread只读r相关的参数文件必须存在 rb以二进制形式打开文件多用于图片、声音
text first line. \n second line.
myfileopen(myfile.txt,w)appendtext append file
myfileopen(myfile.txt,a)with open(myfile.txt,w) as file:pass写入文件
myfile.write(text)关闭文件
close()先刷新缓冲区还没有写入的信息然后再关闭文件这样可以将还没有写入文件的内容写入到文件
myfile.close()#记得关上读取文件
read()打开模式必须是r/r
file open(myfile.txt,r)
content file.read()
#逐行读取
first_line file.readline()
#逐行读取并保存为list数据类型
content_list file.readlines()
print(content)文件指针
file.seek() 是 Python 中用于移动文件指针读写位置的方法以字节数为单位。文件指针指示了即将被读取或写入的位置。file.seek(offset, whence) 方法接受两个参数
offset表示偏移量可以为正数或负数表示相对于 whence 参数的偏移量。whence可选参数表示基准位置可选值为 0文件开头、1当前位置、2文件末尾默认为 0。
例如 如果你想从文件开头偏移10个字节可以使用 file.seek(10, 0)。 如果你想从当前位置向后偏移5个字节可以使用 file.seek(5, 1)。 如果你想从文件末尾向前偏移20个字节可以使用 file.seek(-20, 2)。
file.tell() 方法来获取当前文件指针的位置。
with open(example.txt, r) as file:file.seek(5) # 移动文件指针到第6个字符的位置索引从0开始data file.read(10) # 读取10个字符print(data)os.rename(src, dst)重命名文件或目录。
将目录或文件从 src 参数指定的路径重命名为 dst 参数指定的路径。 当 倒数第二级目录不同时会创建新文件夹
import osos.rename(old_file.txt, new_file.txt)os.remove(file)删除文件。
import osos.remove(file_to_delete.txt)os.rmdir(directory)删除空目录。
import osos.rmdir(empty_directory)os.removedirs(directory)递归删除目录及其所有子目录中的所有空目录。
import osos.removedirs(parent_directory/child_directory/grandchild_directory)shutil模块中存在一个rmtree()函数用于递归删除目录以及目录中的所有文件和子目录。
使用rmtree()函数需要小心因为它会永久删除指定的目录及其中的所有内容无法恢复。
import shutilshutil.rmtree(path/to/directory_to_delete)os.chmod(path, mode)更改文件或目录的权限模式。
import osos.chmod(file.txt, 0o777) # 设置文件权限为所有者可读写执行目录操作
模块os和os.path 变量
os.name操作系统的类型 nt’是windows ’posix’是linux、unix、macosos,linesep当前操作系统的换行符os.sep当前操作系统的路径分隔符
路径
import os# 获取当前工作目录
current_dir os.getcwd()
print(当前工作目录:, current_dir)# 组合当前目录下的相对路径为绝对路径
relative_path myfolder/myfile.txt
absolute_path os.path.abspath(relative_path)
print(相对路径, relative_path, 的绝对路径是:, absolute_path)输出
当前工作目录: /home/user
相对路径 myfolder/myfile.txt 的绝对路径是: /home/user/myfolder/myfile.txt使用 os.path.join() 函数来拼接路径。这个函数可以帮助我们安全地创建跨平台兼容的文件路径无需担心不同操作系统的路径分隔符差异。 函数不会验证拼接的路径是否存在
import os# 定义要拼接的路径部分
folder myfolder
filename myfile.txt# 使用os.path.join()拼接路径
full_path os.path.join(folder, filename)# 打印拼接后的完整路径
print(完整路径:, full_path)假设在 Unix/Linux 系统上运行以上代码将输出拼接后的完整路径
完整路径: myfolder/myfile.txt在 Windows 系统上运行输出将会是
完整路径: myfolder\myfile.txt目录
使用os.path.exists() 来检查目录是否存在。
使用 os.mkdir() 来创建单个目录。
使用 os.makedirs() 来创建多级目录。如果上级目录不存在会一并创建所需的上级目录。
使用 os.rmdir() 来删除目录。
import osdirectory myfolder
if os.path.exists(directory):print(f目录 {directory} 存在)
else:print(f目录 {directory} 不存在)
os.makedirs(directory) # 创建目录包括必要的父目录
os.makedirs(path/to/new_directory, exist_okTrue)
os.rmdir(directory) # 删除指定的目录使用 os.walk() 来遍历目录中的子目录和文件。
返回一个生成器每次迭代产生一个包含目录路径、子目录列表和文件列表的元组 (root, dirs, files) root 是当前目录的路径。字符串 dirs 是当前目录下的子目录列表。列表 files 是当前目录下的文件列表。列表
import osdirectory my_folderfor root, dirs, files in os.walk(directory):print(f当前目录: {root})print(f子目录: {dirs})print(f文件: {files})print()十一、类 对象
在python中一切都是对象函数等也是对象 对象是类的实例 面向对象的三大特征封装、继承、多态将父类对象应用于子类特征
类
具有相同的属性和方法的对象的集合 类名通常以大写字母开头 类的成员由实例方法和数据成员(属性)组成
class Calculator:name calculatordef __init__(self,name):self.name namedef add(self,x,y):recultxyprint(self.name)属性1、类属性定义在类中在函数体外的属性 2、实例属性定义在类的方法中的属性只作用于当前实例类名不能访问实例属性
class Test:a adef __init__(self):self.b bt1 Test.a
t2 Test.b 无法访问
t3 Test().a
t4 Test().b
t Test()
t.a
t.b类属性是属于类本身的属性它被所有类的实例所共享。在类的内部定义的属性属于类属性。当类属性的值被修改时所有实例都会受到影响。
class Person:species Homo sapiens # 类属性person1 Person()
person2 Person()print(person1.species) # 输出 Homo sapiens
print(person2.species) # 输出 Homo sapiensPerson.species Homo erectus # 修改类属性的值print(person1.species) # 输出 Homo erectus
print(person2.species) # 输出 Homo erectus实例属性是属于类实例的属性它只在特定的实例中存在不会被其他实例共享。实例属性通常在 __init__() 方法中初始化并且每个类的实例都可以拥有独特的实例属性值。
class Person:def __init__(self, name):self.name name # 实例属性person1 Person(Alice)
person2 Person(Bob)print(person1.name) # 输出 Alice
print(person2.name) # 输出 Bob__init__()
init() 是一个特殊方法也称为构造方法用于在创建一个类的实例时进行初始化操作。当实例化一个类时会自动调用该类的 init() 方法。
class Person:def __init__(self, name, age):self.name nameself.age agedef introduce(self):print(fMy name is {self.name} and I am {self.age} years old.)# 创建一个 Person 类的实例
person1 Person(Alice, 30)# 调用实例的方法使用.访问
person1.introduce()访问限制
首尾双下划线系统定义的单下划线开头protected类型只允许类本身和子类访问不能import双下划线开头private类型只允许定义该方法的类本身进行访问
class MyClass:def __init__(self):self.public_var 10 # 公开的实例属性self._protected_var 20 # 受保护的实例属性self.__private_var 30 # 私有的实例属性会触发名称修饰def public_method(self):print(This is a public method)def _protected_method(self):print(This is a protected method)def __private_method(self): # 私有的方法会触发名称修饰print(This is a private method)obj MyClass()print(obj.public_var) # 可以访问公开的实例属性
print(obj._protected_var) # 也可以访问受保护的实例属性
# 以下访问会触发 AttributeError
print(obj.__private_var)
obj.__private_method()通过类名双下划线属性名的形式来访问私有属性。
# 使用名称修饰来访问私有属性
class MyClass:def __init__(self):self.__private_var 30obj MyClass()print(obj._MyClass__private_var)# 通过公共方法来访问私有属性
class MyClass:def __init__(self):self.__private_var 30def get_private_var(self):return self.__private_varobj MyClass()print(obj.get_private_var())十二、 装饰器
他们是修改其他函数的功能的函数。
将类方法转换为属性的装饰器
property 是 Python 中用来将类方法转换为属性的装饰器它可以让我们通过访问属性的方式调用方法从而实现对属性的访问和计算逻辑的封装。
class Circle:def __init__(self, radius):self._radius radiuspropertydef radius(self):return self._radiuspropertydef area(self):return 3.14 * self._radius ** 2radius.setterdef radius(self, value):if value 0:raise ValueError(Radius must be positive)self._radius valueradius.deleterdef radius(self):del self._radius# 创建 Circle 实例
my_circle Circle(5)# 访问属性方法
print(my_circle.radius) # 输出半径
print(my_circle.area) # 输出面积# 修改属性值
my_circle.radius 10
print(my_circle.radius)# 删除属性
del my_circle.radius可以实现只读属性
class Circle:def __init__(self, radius):self._radius radiuspropertydef radius(self):return self._radius# 创建 Circle 实例
my_circle Circle(5)# 访问只读属性
print(my_circle.radius) # 输出半径# 尝试修改只读属性将会引发 AttributeError 异常
try:my_circle.radius 10
except AttributeError as e:print(Error:, e)函数装饰器
def my_decorator(func):def wrapper():print(Before calling the function)func()print(After calling the function)return wrappermy_decorator
def say_hello():print(Hello!)say_hello()类装饰器
类装饰器是那些实现 call 方法的类它们可以像函数装饰器一样使用。
class MyClassDecorator:def __init__(self, func):self.func funcdef __call__(self):print(Before calling the function)self.func()print(After calling the function)MyClassDecorator
def say_hi():print(Hi!)say_hi()十三、继承
通过 class 子类(父类): 声明继承关系。 派生类中定义__init__()时不会自动调用基类的init方法必须进行初始化使用super()调用基类的init()
# 定义父类
class Animal:def __init__(self, name):self.name namedef speak(self):print(f{self.name} makes a sound)# 定义子类继承自 Animal
class Dog(Animal):def __init__(self, name, breed):# 调用父类的初始化方法super().__init__(name)self.breed breeddef speak(self):print(f{self.name} barks)def fetch(self):print(f{self.name} fetches the ball)# 创建子类实例
dog Dog(Buddy, Golden Retriever)
print(dog.name) # 继承自父类
dog.speak() # 重写了父类方法
dog.fetch() # 子类新增的方法super()
super() 是一个内置函数用于调用父类的方法。通常在子类中使用 super() 函数来调用父类的方法这样可以避免显式地提及父类的名称
super() 可以在两种不同的情况下使用经典类不继承自 object 的类中和新式类继承自 object 的类中。 在 Python 3.x 中所有的类都默认继承自 object。
class ParentClass(object):def some_method(self):# 方法实现class ChildClass(ParentClass):def some_method(self):super().some_method()# 子类方法的实现十二、input
input 返回的字符串
a input(input:)
print(a,a)十五、错误处理 try except finally
try:file open(1,r)#r只读加写入的方式打开
except Exception as e:#try执行失败print(e)response input(do you want to create a new file)if responey:file open(1,w)
else:#try执行成功file.write(sss)
file.close()
finally 是 Python 中的一个关键字通常用于定义在try语句块结束之后无论是否发生异常都要执行的代码块。finally 语句块通常用于清理资源、确保某些操作一定会被执行或者在try语句块结束时执行一些必要的收尾工作。
try:# 可能会发生异常的代码块# 这里会尝试执行一些操作
except SomeException:# 异常处理代码
finally:# 无论try代码块中是否发生异常都会执行的代码块# 这里放一些清理资源或必要的收尾工作try:file open(example.txt, r)# 读取文件内容# 可能会引发异常
except FileNotFoundError:print(File not found)
finally:if file in locals():file.close() # 确保文件关闭print(Finally block executed) # 最终执行的代码raise抛出异常
raise 关键字用于手动触发异常即抛出一个异常。
x -1
if x 0:raise ValueError(x不能为负数)assert
assert 是一个关键字用于在代码中检查某个条件是否为真。当某个条件为假时assert 将引发一个 AssertionError 异常。
condition 是要检查的条件如果条件为 False则 assert 语句将引发异常。message 是可选的用于在引发异常时指定错误信息。
assert condition, messagedef divide(x, y):assert y ! 0, 除数不能为 0return x / yassert只在调试阶段有用可以通过-O参数来关闭assert语句,就会触发优化模式。在优化模式下所有 assert 语句都会被忽略
python -O your_program.py十六、zip lambda map
zip
a[1,2,3]
b[4,5,6]
zip(a,b) #zip后是一个object
list(zip(a,b))
for i,j in zip(a,b):print(i/2,j*2)
list(zip(a,a,b))lambda
def fun(x,y):return xy
fun(12)
fun2 lambda x,y:xy
fun2(1,2)map
map(fun,[1],[2]) #map后是一个object对象
list(map(fun,[1],[2]))
list(map(fun,[1,2],[2,5]))十七、深拷贝deepcopy 浅拷贝copy
copy 对于复杂对象比如嵌套列表、字典等copy() 只会复制对象本身和其内部的引用而不会递归地复制内部的子对象 deepcopy 对于复杂对象deepcopy() 会递归地复制所有子对象从而生成一个完全独立的副本原对象和复制对象之间没有任何关联。
import copy
a[1,2,3]
ba #a,b指向同样的内容
id(a)#id是看a在内存中的地址
id(b)
print(id(a)id(b))
c copy.copy(a)
print(id(a)id(c))import copyoriginal_list [1, [2, 3], 4]
shallow_copy_list copy.copy(original_list)
deep_copy_list copy.deepcopy(original_list)original_list[1][0] 5print(original_list) # [1, [5, 3], 4]
print(shallow_copy_list) # [1, [5, 3], 4]共享引用
print(deep_copy_list) # [1, [2, 3], 4]独立副本十九、多核运算
在这里插入代码片二十、tkinter
二十一、python gui界面
wxpython
二十二、pickle存放数据
import pickle
a {1:da,2:[1,2,3]}
file open(1,wb)#b表示二进制
pickle.dump(a,file)
file.close()file open(1,rb)
a1 pickle.load(file)
file.close()
print(a1)with open(1,rb) as file:#with 会自动关闭filea1 pickle.load(file)
print(a1)二十六、datetime time
计算两个日期间的倒计时
import datetime
import timecount_time datetime.datetime(2024, 11, 11, 0, 0, 0, 0)
while True:now_time datetime.datetime.now()countdown count_time - now_timeprint(f距离结束{countdown.days}天{countdown.seconds//3600}时{(countdown.seconds % 3600)//60}分{(countdown.seconds % 3600) % 60}秒)time.sleep(1)datetime.datetime.strptime()
用于将一个字符串解析为一个 datetime 对象。其语法如下
datetime.datetime.strptime(date_string, format)date_string 是待解析的日期时间字符串。 format 是日期时间字符串的格式指定了解析字符串的结构。
from datetime import datetimedate_string 2024-03-22 12:00:00
date_obj datetime.strptime(date_string, %Y-%m-%d %H:%M:%S)
print(date_obj) # 输出2024-03-22 12:00:00
print(type(date_obj)) class datetime.datetimedatetime.datetime.strftime()
用于将一个 datetime 对象格式化为一个字符串。其语法如下
datetime_obj.strftime(format)datetime_obj 是一个 datetime 对象表示待格式化的日期时间。 format 是格式化字符串指定了输出字符串的结构。
from datetime import datetimedate_obj datetime(2024, 3, 22, 12, 0, 0)
date_string date_obj.strftime(%Y-%m-%d %H:%M:%S)
print(date_string) # 输出2024-03-22 12:00:00
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87125.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!