小记一
python的镜像源
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
注意:新版Ubuntu
要求使用https
源。
升级:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pygames
例如:pip3 install -i https://pypi.doubanio.com/simple/
包名
临时使用:#
可以在使用pip的时候加参数 -i https://pypi.tuna.tsinghua.edu.cn/simple
例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider
,这样就会从清华的镜像去安装pyspider库。
永久修改,一劳永逸:#
Linux下,修改 ~/.pip/pip.conf (没有就创建一个文件夹及文件。文件夹要加“.”,表示是隐藏文件夹)
内容如下:
[global]
index-url = https://pypi.douban.com/simple/
timeout = 6000
[install]
trusted-host = pypi.douban.com
Windows下,直接在 %userprofile%(用户根目录) 目录中创建一个 pip目录,再新建文件 pip.ini。(例如:C:\Users\WQP\pip\pip.ini)内容同上。
输出
字符串为空时,为False
# 保留格式的输出
shi = '''
静夜思
唐·李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
'''
print(shi)
random.choice(shi) # 从shi中任选一个字符
# 格式化输出
age = 26
name = '蔡徐坤'
money = 999
print("%s,今年%s岁,一首歌赚了%s块钱" %{name,age,money}) # 将类型转为字符串型输出
print("%s,今年%d岁,一首歌赚了%d块钱" %{name,age,money}) # 按照原类型输出字符串
if …else…简写
# 未简写的样式
a = 10
b = 30
if a > b:
c = a
else:
c = b
print(''a和b中的最大值是%d'' %c)
# 简写样式
a = 10
b = 30
c = a if a>b else b
print("a和b两个数较大值是%d" %c)
小记二
(均由字符串调用)
-
for(while)...else...
其循环内容被执行完,就会执行else
的内容,一旦循环被终止(break),遍不会执行else内容 -
id
表示地址,以数字的形式展现 -
find
从左向右查找,返回索引,若无,返回-1
;rfind
从右向左查找,同find(可字,或字符串) -
index
从左向右查找,与find
不同的是,若无返回“错误”,rindex
则相反 -
count
查找该字符存在的次数 -
startswith
匹配前面字符串,返回True/False,endswith
匹配后面字符串,同前; -
is 开头用于判断
isalpha
是否由字母组成;isdight
是否由数字组成‘isalnum
是否是由数字和字符组成(alpha-numic);isspace
是否为空白; -
replace(old,new,count)
默认全部替换,也可以用count来控制替换的次数;split/rsplit/splitlines('分隔符',maxsplit)
返回一个列表,maxsplit最大分割次数;partition/rpartition('分隔符')
按照分割符分为三个部分 (前,分隔符,后) -
capitalize
将该段字母首字母转为大写,title
将每个单词的首字母改为大写 -
ljust/rjust/center(数)
按照数的长度做出对齐的方式;lstrip/rstrip/strip
去除(左右)空格 -
format
格式化字符串,效果与%占位格式化一样{}表示占位符,字符串后使用
format
可以使字符串进行格式化
eg:1. 变量名字符串,其参数要使用关键字,键值对的方式,顺序不要求
s = “我叫{name},今年{age}岁,小华也{age}岁”.format(name = “小明”,age = “18”)
2. 数字段字符串,其参数为大于0的数,可重复使用,将format
的参数视为元组,tuple[0],其参数顺序不能颠倒
name = “小明”
age = 18
s = “我叫{0},今年{1}岁,小华也{1}岁”.format(name,age)
3. 省略字段名,位置传递参数,其中参数位置对应,可以少,但不能多
s = “我叫{},今年{}岁,小华也是{}岁”.format(‘小明’,18)while True: name = input('输入账户:') # 用户名:全部小写,首个字符不能为数字,并且长度要大于等于6;手机号码11位纯数字 if (name.islower() and not name[0].isnumeric() and len(name) >= 6) or ( name.isdight() and len(name) == 11 ): print('正确') break else: print('错误')
小记三
(列表相关)
extend
列表的拼接;pop(index)
列表元素 根据索引的删除 \color{#008000} {根据索引的删除} 根据索引的删除,不加参数时,从后向前删除;remove(element)
列表元素 根据元素名称的删除 \color{#008000} {根据元素名称的删除} 根据元素名称的删除,当参数为空时,报错,当有重复的名称时,删除第一个,in
判断是否在列表内;insert(index,obj)
插入元素到索引位置del 列表/字符串
删除其对应指针的指向,当删除列表加索引时,仅删除该元素sort
排序,参数默认为reverse = False
,改为True
时,会逆序;当仅仅使用reverse
时,就是将列表内容进行反转- 列表推导式eg:
[ i + 2 for i in range(10) if i % 2 == 0 ]
首先执行for,接着执行if,最后进行赋值
list = ['62' ,'hello' ,'100' ,'world']
[ word.title() if word.startswith('h') else word.upper() for word in list]
,首先执行for,在执行if分支,最后赋值
[(i,j) for i in range(2) for j in range(3)]
先左后右 - 发现一个问题,当使用remove删除元素时,会出现有重复的元素删除不干净的情况
原因:当删除列表元素后,下标与所想不一致造成的s = ['西瓜', '面包', '酸奶', '豆浆', '酸奶', '酸奶', '方便面'] # 情况,重复的酸奶未删除 for i in s: if i == '酸奶': s.remove(i) print(s) # ['西瓜', '面包', '豆浆', '酸奶', '方便面'](当删除'酸奶'后,被删除'酸奶'的索引下标成为酸奶后面元素,相当于被删除元素后的所有元素整体前移,但for循环下i的索引会按照原来向后延申,被删除元素下标索引所对应的元素为删除元素后面的元素,不会被赋予给i,所以就形成了存在重复元素时,未被删除) # 解决情况如下 n = 0 while n < len(s): if s[n] == '酸奶': s.remove(s[n]) else: n += 1 print(s) # ['西瓜', '面包', '豆浆', '方便面']
# 一位大佬的思想方法,就是在不改变原列表的情况下,逆序列表内容遍历,而remove是正序删除的 s = ['西瓜', '面包', '酸奶', '豆浆', '酸奶', '酸奶', '酸奶', '酸奶', '方便面'] for i in s[::-1]: if i == '酸奶': s.remove(i) print(s) # ['西瓜', '面包', '豆浆', '方便面'] # for i in range(s.count('酸奶')) # s.remove('酸奶') #另一位就是建立一个新表,进行遍历,若不是牛奶,就将其添加到新表中,最后将新表直接赋值给原表
小记四
(字典相关)
update
合并字典;get
获取键对应的值,若不存在,返回None;字典[key]
若不存在,报错KeyError
;item
遍历每一项;fromkeys(键参数,值参数)
创建一个含有参数的键,其值默认为None,若赋值为“值参数”(该参数只能有一个),所有键变为该值books = [] flags = True while flags: book = input('请输入添加书的名称,作者,价格(以空格进行分割)').split(" ") for i in books: if book[0] == i.get("书名"): print(f"[{book[0]}] 已存在,已跳过此选项") break else: books.append({ "书名": book[0], "作者": book[1], "价格": book[2] }) if len(books) == 3: flags = False print(books)
(集合相关)
- 集合(set)底层是以
字典
的方法实现的,其特点便是:无序,无重复,其实现{元素}
是字典中仅有值 {}
表示空字典,而空集合要用set()
;update
合并集合;add
集合添加元素;pop
随即删除元素;remove
删除元素,若不存在,keyerror;discard
删除,若不存在,do nothingintersection &
交集;union |
并集;difference -
差集- 列表转字典,要求
列表中的每一项必须包含两个元素
,不论该项是元组,列表还是集合
小记五
sorted(参数1,参数2)
参数1需要为一个可迭代的对象,参数2默认为reverse=False
(函数相关)
isinstan(变量, 类型)
判断该变量是否为该类型,返回值bool函数参数
(n,m,index=‘2’,school=“清华”)其中index表示默认参数,传参时,按照从左至右传参,当想要越过index传参时,要使用关键字传参的方式,eg:s,c,school="北大"
- 值和地址的关系,可变的地址赋值:int,str,tuple,float,bool;不可变地址赋值:list,dict,set
递归函数
条件:a.要有出口;b.每次递归向出口靠近- 匿名函数:lambda 参数列表:返回值表达式
min/max
其中第二个参数为func,可对列表或元组参数使用lambda表达式完成
sorted
其第二个参数可以是匿名函数表达式
filter
过滤,其第一个参数可以使用匿名函数,进行筛选
map
做出映射,第一个参数为func,可使用匿名函数from functools import reduce list1 = [('tom', 19), ('tony', 20), ('lily', 18), ('daniel', 21), ('rose', 22)] max(list1, key = lambda x: x[1]) # ('rose', 22) min(list1, key = lambda x: x[1]) # ('lily', 18) sorted(list1, key = lambda x: x[1], reverse = True) # [('rose', 22), ('daniel', 21), ('tony', 20), ('tom', 19), ('lily', 18)] rr = filter(lambda x: x[1] > 20, list1) list(rr) # [('daniel', 21), ('rose', 22)] ma = map(lambda x: x[1] + 1, list1) list(ma) # [20, 21, 19, 22, 23] maa = map(lambda x: x[0].title(), list1) list(maa) # ['Tom', 'Tony', 'Lily', 'Daniel', 'Rose'] map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]) # [3, 7, 11, 15, 19] r = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]) # 15,x = 1,y = 2,向后就是将x = x+y,y = 后面的数
装饰器@+装饰函数
采用闭包,内嵌函数,内部函数使用外部函数的参数,返回内部函数