导图社区 python
python基础知识,Python由荷兰数学和计算机科学研究学会的 Guido van Rossum 于1990 年代初设计,作为一门叫做 ABC语言 的替代品
编辑于2021-08-12 14:01:03python基础
关键字(保留标识符)
流程控制
if
elif
while
for
else
结束最近的一条循环,跳到外层
try
逻辑运算
and
or
not
in
with
pass
占位符,用于流程语句需要有子句输入又暂时不知道输入什么时使用 在写程序时先写出程序的大框架,在细化具体功能
del
lambda
标识符
自己对变量的命名
包含字母数字和下划线,不能以数字开头,不能包含其他的任何符号
遵循驼峰命名法,方便维护
变量
python中不需要先定义变量类型,需要用到时直接个变量赋值,python会自动为编订定义数据类型
变量的引用
变量的赋值都是引用
a = 100 b = a a和b实际上只是对数据100所在的内存地址进行引用
python变量的引用是将变量值所在的内存地址进行重复引用
内置函数 id()可以查询变量的内存地址
注释
以#开头
以‘’包裹的单行注释
以''' '''包裹的多行注释
计算器
+-*/用做计算符号
()用来分组
//取商,并非四舍五入
%取余数
round(2.45,1)第一个参数是需要四舍五入的数值,第二参数是保留小数位数,此函数用在两位以内的待处理数时没有问题,当小数位数到3位以上时则以4舍6入5平分的原则进行。多为小数需要自己写函数另外实现。
**用作计算幂,5**2:5的2次方,** 比 - 的优先级更高(-5)**2的才是25
=用作赋值,当变量未赋值时会报错,name 'n' is not defined
decimal:十进制定点和浮点运算,提供与人们在学校学习的算法相同的算法。而float会因为进制问题导致计算结果出错
fractions模块支持分数运算,fractions.Fraction(16,-10)>>>fractions.Fraction(-8,5)
栈/队列
队列先进先出
栈后进先出
流程控制语句
条件判断
if
while
也可以用于遍历,但不如for方便
子句内同判断结果为真时,才会执行语句内的子句
for
指定循环次数,子句为可迭代对象的调用或判断子句
字符串,列表等迭代对象遍历
复合赋值运算符
+=
i += 1 ,如果i的起始值是1,那么复制后i为2,下面的赋值计算类似
-=
*=
/=
//=
%
**=
递归recursion
4的阶乘
def 阶乘(num): if num>1: return num*def 阶乘(num-1) else: return num
函数的嵌套调用,只是调用自己
当被调用函数与本函的功能相同时即可以使用递归
要注意递归的循环结束条件,否则此函数会是死循环
函数
封装一段代码块结合成一个整体,实现代码的复用,简化程序的维护
定义函数应集中定义在一起
函数的定义格式:def func_name (arguments):
函数的嵌套调用
在一个函数中可以调用其他的函数
return
可以返回多个值,但在返回子句需将多个值封装(封装时可以用字典,列表,元组,集合等)
当函数执行到return时函数就结束,并返回值
变量的作用域
全局变量
如果函数需要调用全局变量时,全局变量应定义在函数被调用之前
推荐格式: 定义全局变量; 定义函数: pass 调用函数() 建议 在定义全局变量时 在全局的变量名前加上特殊字符及下划线 如:g_name = 100 用以区分与局部的同名变量
局部变量
类内部定义的变量
函数内部定义的变量
局部变量的优先级高于全局变量
局部变量只能在局部使用任何外部调用都是不可以的
局部变量调用全局变量并需要修改时,需要在函数内部的变量名前加global 变量名对全局变量进行申明,如果函数并未对全局变量(不可变类型)进行重新赋值的话可以不对全局变量进行声明(声明在函数的 开始处)
a= 100 def func(): global a a = 0
函数说明文档
定在函数名与函数体之间,用来说明函数的功能,及参数提示信息
定义main函数作为执行控制主题
函数参数
元组参数的打包解包用一个*,字典参数的打包解包用两个**
关键字参数(命名参数),默认值参数(调用时叫命名参数)需跟在无默认值参数后面
def func (仅限位置参数,/,位置或关键字参数,*args不定长参数(将传递的多余参数打包进一个元组对象)(如果在调用时需要传递可迭代对象时需用一个星号进行解包),**kword关键字参数(实参传递时需要用命名参数进行传递)(传递字典参数时在字典前加**将字典的元素解包传递给‘关键字参数’),*,仅限关键字参数)
1.使用仅限位置形参,可以让用户无法使用形参名。形参名没有实际意义时,强制调用函数的实参顺序时,或同时接收位置形参和关键字时,这种方式很有用。对于 API,使用仅限位置形参,可以防止未来修改形参名时造成破坏性的 API 变动。 2.当形参名有实际意义,且显式名称可以让函数定义更易理解时,阻止用户依赖传递实参的位置时,才使用关键字。
不定长参数
eval(expression[, globals[, locals]])
expression 参数会作为一个 Python 表达式(从技术上说是一个条件列表)被解析并求值,
内置数据类型
文本类型
字符串
字符串是由 Unicode 码位构成的不可变序列
字符串性质
字符串不可更改
用单引号('……')或双引号("……")标注的结果相同 ,反斜杠 \ 用于转义。
特殊字符如 \n 在单引号('...')和双引号("...")里的意义一样,依然表示换行。 这两种引号唯一的区别是,不需要在单引号里转义双引号 ",但必须把单引号转义成 \',反之亦然。
print() 函数输出的内容更简洁易读,它会省略两边的引号,并输出转义后的特殊字符
原始字符串,在引号前添加 r/R,使引号内的特殊字符串失去特殊含义
字符串可以用 + 合并(粘到一起),也可以用 * 重复:
相邻的两个或多个 字符串字面值 (引号标注的字符)会自动合并,用于拆分长字符串
字符串行尾加”\"用作续航,在解释时“\”会消失,分开的行会合并到一行,在不需要回车换行时使用
字符串索引 (下标访问),索引从0开始,"0"和"-0"一样,索引还支持负数,用负数索引时,从右边开始计数
字符串切片 '你好世界'[0:2]输出 '你好',输出结果包含切片开始,但不包含切片结束。 索引指向的是字符 之间
字符串是 序列类型 ,支持序列类型的各种操作
单个回车符\r前的字符在解析时会丢失,\r\n前的字符不会丢失。
字符串的连接用+,字符串的复制用*
字符串索引越界会报错,切片越界会自动处理
len() 返回字符串的长度
字符串可以通过list(string)转化为列表
字符串方法
查询字符串
str.find(sub[,stsrt[,end]])
返回子字符串在原str中的索引位置,返回索引位置与指定切片位置无关。要检查 sub是否为子字符串,请使用 in 操作符
str.rfind(sub,start,end)
从str字符串右边开始查找,返回子字符串在str中的索引
找到返回索引,找不到返回-1
str.index(sub,start,end)
返回字符串索引
str.rindex(sub,start,end)
找到返回索引,找不到引发异常
str.count(sub[,start[,end]])
返回sub在str中指定位置出现的次数
字符串转换
字符串大小写转换
str.capitalize()
返回原字符串的副本,其首个单词首个字母大写,其余为小写。str.upper()返回字符串大写
str.title()
该算法使用一种简单的与语言无关的定义,将连续的字母组合视为单词。 该定义在多数情况下都很有效,但它也意味着代表缩写形式与所有格的撇号也会成为单词边界,这可能导致不希望的结果: >>>"they're bill's friends from the UK".title() "They'Re Bill'S Friends From The Uk" 解决方法: >>> import re >>> def titlecase(s): ... return re.sub(r"[A-Za-z]+('[A-Za-z]+)?", ... lambda mo: mo.group(0).capitalize(), ... s) ... >>> titlecase("they're bill's friends.") "They're Bill's Friends."
每个单词的首字母大写
str.upper()
所有字母大写
str.low()
所有字母小写
str.casefold()
消除大小写的字符串可用于忽略大小写的匹配。比str.low()更为彻底
str.swapcase()
s.swapcase().swapcase() == s 并不一定为真值。
返回与原str大小写相反的字符串
字符串修改
str.replace(old,new,count)
按指定子字符串及替换次数替换str中的指定字符串
str.lstrip([chars])
默认删除左侧空白字符,chars为指定的要删除的字符,实际会删除chars的各种字母组合
str.strip([chars])
默认删除str前导及末尾的空白字符
str.rstrip([chars])
默认删除末尾空白字符
str.removeprefix(prefix,/)
移除str的指定prefix前缀,只删除输入排序一种组合
str.removesuffix(suffix,/)
移除str中的指定suffix后缀
str.zfill(width)
正负值前缀 ('+'/'-') 的处理方式是在正负符号 之后 填充而非在之前。 如果 width 小于等于 len(s) 则返回原字符串的副本。
返回原字符串的副本,在左边填充 ASCII '0' 数码使其长度变为 width。
str.jion(sep)
在可迭代对象sep元素之间加入str,并连接sep为一个字符串
字符串重排
str.expendtabs(tablesize=8)
expandtabs() 方法把字符串中的 tab 符号 \t 转为空格,tab 符号 \t 默认的空格数是 8,在第 0、8、16...等处给出制表符位置,如果当前位置到开始位置或上一个制表符位置的字符数不足 8 的倍数则以空格代替。制表符本身不会被复制,如果是换行\n或回车\r将会被复制到新字符串中并将当前列重置为零
str.center(width[,fillchar])
用fillchar扩充原字符串长度到width长度,原字符串在扩充后的字符串中间,原字符串指针不变
str.rjust(width,fillchar)
返回长度为width的新字符串原字符串在其中靠右对齐
str.ljust()
原字符串在其中靠左对齐
检查字符串
str.endswith(stuffix[,start[,end]])
如果字符串以指定的 suffix 结束返回 True,否则返回 False。 suffix 也可以为由多个供查找的后缀构成的元组
str.startswith()
检查str是否以子字符串开头
str.isalpha()
判断是否纯字母
str.isnumeric()
检查字符串中是否全部为数值字符
str.decimal()
检查字符串是否都是十进制数
str.isdigit()
判断是否纯数字包含numeric及十进制数
str.isalnum
检查字符串中是否全是字母或数字
str.isspace()
判断是否全是空白字符
str.isascii()
检查字符串为空或者所有字符都是ascii
str.isidentifier()
检查字符串是否是有效标识符
str.islower()
检查字符串是否全是小写字符
str.isupper()
检查字符串是否都是大写
str.istitle()
检查字符串是否标题字符,字符中的每个单词是否都只有首字母大写
判断正确返回True,否则返回False
字符串切割
str.partition(sep)
从左到右将str按照sep,分成三个元素的元组,sep不会删除
str.rpartition()
从右到左将str按照sep,分成三个元素的元组,sep不会删除
返回元组
str.splitlines()
字符串按行边界(不包含空格)切割
行边界符
\n:换行 \r:回车 \r\n:回车 + 换行 \v 或 \x0b:行制表符 \f 或 \x0c:换表单
\x1c:文件分隔符 \x1d:组分隔符 \x1e:记录分隔符 \x85:下一行 (C1 控制码) \u2028:行分隔符 \u2029:段分隔符
list(str)
将字符串分割成单字符列表
str.rsplit()
返回一个由字符串内单词组成的列表
str.split(sep,[,maxspit])
默认以空白字符切割,删除所有空白字符,只返回不包含空白字符的列表
返回列表
字符串切片,字符排序
字符串切片
str[start:end:step]
'python'[2:5]-->'tho 切片输出包含索引开始值不包含结尾值
'python'[:5]-->pytho
'python'[:]-->python 字符串复制
'python'[2:]-->thon
'python'[-1]-->n
'python'[0:6:2]-->pto
字符串排序
'python'[-1::-1]-->'nohtyp'
'python'[::-1]-->nohtyp
sort(str.split())
字符串编码解码
str.encode(encoding="utf-8",errors="strict")
将字符串转化为指定编码。 默认编码为 'utf-8'
str.decode(encoding='utf-8',errors='strict')
str.maketrans(x[,y[,z]])
静态方法
返回供translate方法使用的转换对照表
str.translate(table)
格式化字符串
str.format(*args,**kwargs)
str.format_map(mapping)
数值类型
int
float
complex
序列类型
tuple
单元素元组,元素结尾必须加逗号分隔
(‘1’,)
零元素元组
()
c,d = (1,2)
c的值等于1,d的值等于2,此表达式相当于拆包
元组的创建
tuple = 1, 2, 3
tuple = (1, 2, 3)
range
list
一般情况下,用来存储单一数据类型
可以存储各种数据类型
不能通过内置方法将列表转换成字符串
列表的操作
字符串的切片操作同样适用于列表
list.copy()
返回列表的浅拷贝相当于list[:]
取列表长度
len(list)
list.count(element)
返回列表中指定元素出现的次数
增加
list.append('content')
在列表末尾插入指定元素,content可以是任何对象,但只会作为一个元素进行添加,append方法没有返回值
list.insert(index, 'content')
在index之后插入
list1 + list2
列表合并
list.extend(iterable)
列表扩展
删除
list.pop(index)
删除list中指定位置的元素,默认删除最后一个元素,并返回被删除的元素
list.remove(content)
从列表索引1开始删除,只删除第一个
del list[index]
根据索引删除指定元素,del list 会删除变量
list.clear()
清空列表中的所有元素,不会删除变量,相当于del [:]
修改
list[index] = content
查找
conten in list
使用in关键字
content not in list
list.index(element,[,start[,end]])
返回指定元素在列表中的索引
排序
list.sort(*, key = None, reverse = False)
列表排序,用法与sort()内置函数相同
list.reverse()
反转列表元素
sort(list,key=obj,reverse=bool)
根据 iterable 中的项返回一个新的已排序列表。,原列表不会修改,key 形参用来指定在进行比较前要在每个列表元素上调用的函数(或其他可调用对象)。调用元素类型内置对象时不能传入参数,不能加括号,类如;(key=str.lower)
映射类型mapping(字典)
以键名(关键字)为索引
键名(关键字)只能时不可变数据类型,字符串,数字,元组(元组内部不能间接可变数据类型)
可以把字典理解为 键值对 的集合,但字典的键必须是唯一的。
字典的主要用途是通过关键字存储、提取值。
dict
字典是无序的,只能根据键寻找值
x={'fruit':'apple','color':'red',price':5}
字典中存储的为一系列的键值对,根据键取值
{}['key']
查询key所对应的值(value)
{}['new_key']=new_value
字典的添加通过输入新的键值对
del {}['key']
通过给定键名删除对映的字典,如果键不存在会引发异常
{}.get('key')
获取给定键名的值,键名不存在时不会引发异常而是返回None,返回对应的value
len({})
返回字典的键值对数量
{}.keys()
返回一个对象指向字典中的所有键名组成的列表
{}.values()
返回一个对象指向字典中的所有值的列表
{}.items()
返回一个对象指向由字典中键值对组成的列表键值对以元组的形式表现,键值对被包含在元组中
key in {}
使用关键字in检查字典中是否存在某个键
list({})
返回字典所有键的列表
字典的创建
dict()构造函数
dict([('space', 4139), ('guido', 4127), ('jack', 4098)])
使用字典推导式
{x: x**2 for x in (2, 4, 6)}
使用关键字参数指定键值对
dict(sape=4139, guido=4127, jack=4098)
集合类型
set
x={'apple','cherry'}
frozenset
x=frozenset({'apple','cherry'})
布尔类型
bool
x=True
False
二进制类型
bytes
x=b"hello"
bytearray
x=bytearray(5)
memoryarray
x=memoryview(bytes(5))
数据类型的获取与转换
type()
获取任何对象的数据类型
通过变量赋值设定数据类型
数据类型转换
str()
int()
float()
complex()
list()
tuple()
range()
dict()
set()
frozenset()
bool()
bytes()
bytearray()
memoryview()
构造函数