【学习笔记】python
Python
1、 基础
1.1、基本数据类型
类型 | 描述 |
---|---|
Number | 整形、浮点数、复数、布尔值 |
String | 字符串 |
List | 有序的可变列表 |
Tuple | 有序的不可变列表 |
Set | 无序的不重复集合 |
Dictionary | 无序的键值对 |
TIP
1、查看变量 a 的类型:type(a) —— type不会认为子类是一种父类类型
2、判断变量 a 的类型:isinstance(a,类型) —— isinstance会认为子类是一种父类类型
3、判断 a 是否是 b 的类型:issubclass(a,b)
4、在内存中清除变量所占控件:del 变量1,变量2
类型转换 | 描述 |
---|---|
int(xxx) | 转换为整数 |
float(xxx) | 转换为浮点数 |
str(xxx) | 转换为字符串 |
frozenset(xxx) | 转化为不可变集合 |
chr(xxx) | 将一个整数转化为一个字符 |
ord(xxx) | 将一个字符转化为一个整数 |
hex(xxx) | 将一个整数转化为一个十六进制,类型是字符串 |
oct(xxx) | 将一个整数转化为一个八进制,类型是字符串 |
1.2、运算符
算数运算符 | 描述 |
---|---|
+、-、*、/ | 加减乘除 |
// | 取整 |
% | 取余 |
** | 幂运算 |
赋值运算符 | 描述 |
---|---|
+=、-=、*=、/= | 加减乘除赋值运算符 |
//= | 取整赋值运算符 |
%= | 取余赋值运算符 |
**= | 幂运算赋值运算符 |
:= | 海象运算符,在表达式内部进行赋值 |
# 不使用海象运算符
value = input("请输入一个字符串(输入 'exit' 退出): ")
while value != 'exit':
print(f"你输入了: {
value}")
value = input("请输入一个字符串(输入 'exit' 退出): ")
# 使用海象运算符
while (value := input("请输入一个字符串(输入 'exit' 退出): ")) != 'exit':
print(f"你输入了: {
value}")
海象运算符的优点:可以减少代码的重复,提高代码的可读性和简洁性
逻辑运算符 | 描述 |
---|---|
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
~ | 按位取反 |
<< | 逻辑左移 |
>> | 逻辑右移 |
and | 逻辑与 |
or | 逻辑或 |
not | 逻辑非 |
成员运算符 | 描述 |
---|---|
in | 是否在指定的序列中 |
not in | 是否不在指定的序列中 |
身份运算符 | 描述 |
---|---|
is | 是否引用同个对象,类似于 id(xxx) == id(yyy) |
is not | 是否引用不同的对象,类似于 id(xxx) != id(yyy) |
优先级(由上往下) | 描述 | 类型 |
---|---|---|
(expr…)、[expr…]、{expression…} | 括号中的表达式 | 括号 |
x[index],x[index1:index2]、x.attr | 索引、切片、调用、属性引用 | 自操作 |
await x | await 表达式 | |
** | 乘方 | 运算 |
+x、-x、~x | 正,负,非 | 自运算 |
*、@、/、//、% | 乘、矩阵乘、除、整除、取余 | 运算 |
+、- | 加减 | 运算 |
<<、>> | 移位 | 比特运算 |
& | 按位与 | 比特操作 |
^ | 按位异或 | 比特操作 |
| | 按位或 | 比特操作 |
in、not in、is、is not、<、<=、>、>=、!=、== | 比较运算 | 比较运算 |
not | 非 | 逻辑运算 |
and | 与 | 逻辑运算 |
or | 或 | 逻辑运算 |
lambda | lambda表达式 | |
:= | 海象运算符 |
TIP:在交互模式中,最后被输出的表达式结果会被赋值给变量_,例如
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
1.3、数字
常用操作 | 描述 |
---|---|
abs(x) | 返回数字的绝对值 |
fabs(x) | 以浮点数的形式返回数字的绝对值 |
ceil(x) | 向上取整 |
floor(x) | 向下取整 |
cmp(x,y) | 如果 x<y 则返回 -1,x==y 则返回 0,x>y 则返回 1 |
exp(x) | 返回 e 的 x 次方,例如 exp(1) 返回 2.71828… |
log(x,e) | 以 e 为基数求对数 |
log10(x) | 以 10 为基数求对数 |
max(x1,x2…) | 返回最大值 |
min(x1,x2…) | 返回最小值 |
modf(x) | 返回 x 的整数部分和小数部分,整数部分以浮点型进行表示 |
pow(x,y) | 计算 x**y 的值 |
round(x,[,n]) | 返回浮点数 x 四舍五入的值,n表示保留的位数 |
sqrt(x) | 返回数字 x 的平方根 |
随机数函数 | 描述 |
---|---|
choice(seq) | 从序列的元素中随机挑一个元素 |
randrange([start,] stop [,strp]) | 在指定返回内,start 默认是1,按 step 递增的集合中获取一个随机数 |
random() | 随机生成 [ 0,1 ) 范围内的数 |
shuffle(list) | 将序列的所有元素随机进行排序 |
uniform(x,y) | 随机生成下一个实数,它在 [ x,y ] 范围内 |
三角函数 | 描述 |
---|---|
sin(x)、cos(x)、tan(x) | 正弦、余弦、正切 |
asin(x)、acos(x)、atan(x) | 反正弦、反余弦、反正切 |
degrees(x) | 将弧度转换为角度,如 degrees(math.pi/2) 返回 90° |
radians(x) | 将角度转换为弧度 |
数字常量:
pi
:Π、e
:自然常数
1.3、字符串基础
① 引号输出
name = 'my name is "niki"'
print(name) # my name is "niki"
name = "my name is 'niki'"
print(name) # my name is 'niki'
name = 'my name is \'niki\''
print(name) # my name is 'niki'
② 多行语句
str1 = 'my' + \
'name is' + \
'niki'
print(str1)
③ 让 \ 不发生转义
str1 = r'this is a line with \n'
print(str1)
④ 运算
str1 = 'a'
str2 = 'b'
print(str1+str2) # 连接
print(str1*3) # 打印三次
其他数据容器也可以进行同样的 +、* 运算
⑤ 字符串中的特殊字符
特殊字符 | 描述 |
---|---|
\b | 退格 |
\000 | 空 |
\n | 换行 |
\t | 横向制表符 |
\v | 纵向制表符 |
\r | 将 \r 后面的部分逐一替换掉 \r 前的字符,直到 \r 后的内容完全替换完成 |
\yyy | \三位数字,表示八进制 |
\xyy | \x两位数字,表示十六进制 |
⑥ 字符串的常用操作
大小写转换 | 描述 |
---|---|
str.upper() | 转大写 |
str.lower() | 转小写 |
str.capitalize() | 将字符串的第一个字符转为大写,其余的转为小写 |
str.title() | 将字符串每个单词的首字母转为大写 |
str.swapcase() | 将字符串中大小写互换 |
查找与替换 | 描述 |
---|---|
str.find(str) | 返回子串的索引,找不到返回 -1 |
str.rfind(str) | 类似于 find,只不过是从右边开始找 |
str.index(str) | 类似于 find ,但是找不到会抛出异常 |
str.rindex(str) | 类似于 index ,只不过是从右边开始找 |
str.replace(old,new) | 将子串进行替换 |
str.count(sub) | 计算子串出现的次数 |
拆分与拼接 | 描述 |
---|---|
str.split(sep) | 将字符串按照 sep 进行分割,返回一个列表 |
str.splitlines() | 按行拆分字符串,返回一个列表 |
str.join(iterable) | 使用字符串作为分隔符,将 iterable 中的元素连接成一个字符串 |
s = "hello world"
print(s.split(" ")) # ['hello', 'world']
print("-".join(["hello", "world"])) # "hello-world"
去除空白字符 | 描述 |
---|---|
str.strip() | 去除字符串两端的空白字符 |
str.lstrip() | 去除字符串左边的空白字符 |
str.rstrip() | 去除字符串右边的空白字符 |
判断字符串的内容 | 描述 |
---|---|
str.isalpha() | 检查字符串是否只包含字符且非空 |
str.isdigit() | 检查字符串是否只包含数字且非空 |
str.isalnum() | 检查字符串是否只包含字母和数字且非空 |
str.isspace() | 检查字符串是否只包含空白字符 |
str.isupper() | 检查字符串是否只包含大写字符 |
str.islower() | 检查字符串是否只包含小写字符 |
str.startswith(prefix) | 检查字符串是否以指定前缀开头 |
str.endswith(suffix) | 检查字符串是否以指定前缀结尾 |
其他 | 描述 |
---|---|
str.ljust(width) | 左对齐,默认用空格填充 |
str.center(width) | 将字符串居中,默认用空格填充 |
str.rjust(width) | 右对齐,默认用空格填充 |
str.zfill(width) | 前填充0 |
str.partition(sep) | 将字符串按 sep 进行分割,分割为‘前’、‘中’、‘后’,seq 处于‘中’ |
str.expandtabs(tabsize=8) | 将字符串中的 tab 转化为一定数量的空格 |
1.4、字符串扩展
① 格式化法1
格式符号 | 描述 |
---|---|
%s | 字符串占位符 |
%d | 整数占位符 %5d表示整数的宽度是5,不足5位时用空格补 |
%f | 浮点数占位符 %.2f表示精确到小数点后两位 |
%c | ASCII码占位符 |
%u | 无符号数占位符 |
%o | 无符号八进制占位符 |
%x 或 %X | 无符号十六进制占位符 |
%e 或 %E | 浮点数(科学计数法形式)占位符 |
name = 'niki'
hobby = 'football'
str1 = "my name is %s" % name
print(str1) # my name is niki
str2 = "my name is %s, my hobby is %s" % (name,hobby)
print(str2) # my name is niki, my hobby is football
② 格式化法2
name = 'niki'
age = 18
str1 = f"my namae is {
name}, my age is {
age}"
print(str1) # my name i s niki, my age is 18
③ 格式化法3
# 基本使用
print('{}网址: "{}!"'.format('xxx', 'www.xxx.com')) # xxx网址: "www.xxx.com!"
# 位置型
print('{1} 和 {0}'.format('Google', 'Runoob')) # Runoob 和 Google
# 关键词型
print('{name}网址: {site}'.format(name='xxx', site='www.xxx.com')) # xxx网址: "www.xxx.com!"
# 保留三位小数
print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi)) # 常量 PI 的值近似为 3.142。
# 左填充和右填充
print('{0:10} ==> {1:10d}'.format(Google, 1)) # Google ==> 1
# 传入一个容器
table = {
'Google': 1, 'Runoob': 2, 'Taobao': 3}
print('Runoob: {0[Runoob]:d}; Google: {0[Google]:d}; Taobao: {0[Taobao]:d}'.format(table) # Runoob: 2; Google: 1; Taobao: 3
# **类似于一种解构
table = {
'Google': 1, 'Runoob': 2, 'Taobao': 3}
print('Runoob: {Runoob:d}; Google: {Google:d}; Taobao: {Taobao:d}'.format(**table)) # Runoob: 2; Google: 1; Taobao: 3
1.5、函数
① 在函数内部声明变量为全局变量:global
num = 100
def test():
global num
num = 200
test()
print(num) # 200
② 多返回值
def test():
return 'niki',18,True
name,age,isMale = test()
print(x,y,z) # niki 18 True
③ 传入参数时,位置参数需要在关键字参数之前,位置参数有先后顺序,关键字参数没有先后顺序的要求
def test(name,age,gender):
print(f"my name is {
name}, my age is {
age}, I'm a {
gender}")
test('Tom',gender='boy',age=18)
④ *args 参数,它会以元组的形式接收参数
def test(*args):
print(args)
test('niki') # ('niki',)
test('niki',20) # ('niki',20,)
⑤ **kwargs 参数 ,它会以字典的额方式接收参数
def test(**kwargs):
print(kwargs)
test(name='niki',age=18) # {'name':'niki','age':18}
⑥ 函数作为参数
def add(x,y):
return x+y
def compute(add):
result = add(6,3)
print(result)
compute(add)
⑦ 函数的参数有可变类型、不可变类型之分
可变类型 | 不可变类型 |
---|---|
列表、字典 | 数字、字符串、元组 |
# 不可变类型
def test1(a):
a=10 # a指向了一个新空间
print(a) # 10
a=1
print(test1(a)) # 1
# 可变类型
def test2(l):
l.append([10,20,30]) # l在原来的空间进行更改
print(l) # [1,2,3,[10,20,30]]
l=[1,2,3]
print(test2(l)) # [1,2,3,[10,20,30]]
⑧ 强制位置参数:\
之前的参数必须使用位置参数,*
之后的参数必须使用关键字参数,中间的参数既可以选择位置参数、也可以选择关键字参数
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
f(10, 20, 30, d=40, e=50, f=60)
⑨ 匿名函数 lambda:一种小型、匿名的、内联函数,它可以具有任意数量的参数,但只能有一个表达式,基本使用如下
x = lambda a, b, c : a + b + c
print(x(5, 6, 2)) # 13
lambda 函数通常与 map()、filter() 和 reduce() 等一起使用,以便在集合上执行操作
numbers = [1,
原文地址:https://blog.csdn.net/Eddie_hyh/article/details/142760024
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!