Python知识点
此处结合《Python编程从入门到实践》这本书,罗列了一些比较基础的但很受用的知识点,强烈建议读者自行实践一波。欢迎点赞收藏观看
字符串
- 字符串可以用 ‘’ 也可以用 “”
message = "hello world"
message = 'hello world'
message = "hello 'world' "
message = 'hello "world" ' #便于灵活输出单引号和双引号
#若是单双都要输出,用反斜杠即可
message = "hello \"world\" "
- title() 将首字母大写,空格,数字和其他字符后面的字母均大写
message = "hello world 1a!b[][]c"
print(message.title())
输出:Hello World 1A!B[][]C
- lower() 字符串字母全小写,upper() 字符串字母全大写
- 合并字符串用 +
- lstrip() 删除字符串开头的空白,rstrip() 删除字符串末尾的空白,strip() 删除字符串两端的空白
数字
- ** 表示乘方
3**2 = 9
- int 转 字符串 用str()
age = 23
print(str(age))
- 浮点数
print(3/2) #与C语言不同的是
输出:1.5
列表
- list = [ , , ]
- 索引,list[0],指向第一个元素,索引从0开始
- list[-1] 指向最后一个元素,list[-2] 指向倒数第二个列表元素
- 修改列表元素 list[0] = “new one”
- 添加列表元素 list.append(“new one”)
- 插入列表元素 list.insert(0, “new one”) 在位置0添加元素,0以及其后的元素往右移一个位置
- 删除列表元素 del list[0]
- list = [] 创建一个空列表
- pop() 删除列表末尾元素,并返回一个值。
- pop(i) 可以删除第i个位置的元素。
- 根据值删除元素,remove(“new one”) 只能删除一个值,如果列表中有重复,则要用循环来判断是否删除了所有元素
list = [1, 2, 1]
print(list)
list.remove(1)
print(list)
输出:
[1, 2, 1]
[2, 1]
- sort() 对列表永久性排序 默认ASCII从小到大的顺序
- sort(reserve=True) ASCII从大到小的顺序
- sorted() 对列表临时排序
- sorted(reverse=True)
- reverse() 反转列表顺序
- len() 确定列表长度
- 列表为空时,list[-1]会出错
- 遍历
list = [1, 3, 2]
for i in list:
print(i)
输出:
1
3
2
- 创建数值列表,range(1, 5) 生成1,2,3,4
for i in range(1, 5):
print(i)
输出
1
2
3
4
- range创建数字列表
print(range(1, 5))
print(list(range(1, 5)))
输出
range(1, 5)
[1, 2, 3, 4]
- range(1, 10, 2) 指定 [1,10) 步长为2 的的列表
range(30) 表示0-29
print(list(range(1,9,2)))
[1, 3, 5, 7]
- min() 找数字列表最小
- max()找数字列表最大
- sum()求数字列表总和
- 列表解析
squares = [value**2 for value in range(1, 11)]
等价于
squares = []
for value in range(1, 11):
squares.append(value**2)
- 切片 list[0:3] 或 list[:3] 前三名 (索引 0 1 2)
- 切片 list[-3:] 最后三名
- list[:]
list2 = list[:] #list2和list是两个元素一样的单独的列表
list2 = list #list2和list是同一个,对其中一个操作,另一个也改变
元组
- 不可变的列表 tuple = ( , )
- 可以给元组变量赋值,tuple = (1, 2)
if语句
- if
a = 2
if a == 1:
print(a)
elif a == 2:
print(a+1)
else:
print(a+2)
- 多个条件用 and ,or
- 检查是否在列表中,可以用 in
tuple = (1, 2)
if 1 in tuple:
print("yes")
- 检查是否不在列表中,用 not in
- if list: 可以检查list是否为空
字典
- dict = {key : val}
- dict[key] = val
- 添加键值对,直接 dict[new key] = new val, dict必须原先初始化过
- dict = {} 空字典
- del dict[key] 删除键值对
dict = {
'a': 1,
'b': 2, #有逗号也没事
}
- 遍历
for key, value in dict.items():
print(key)
print(value)
- 遍历字典中所有键
dict = {
'a': 1,
'b': 2,
}
for key in dict.keys(): #也可以省略.keys(),默认是遍历key
print(key)
输出
a
b
- if ‘a’ in dict.keys():
- 遍历字典中所有值,
for value in dict.values():
- 剔除重复项,可以用set()
for value in set(dict.values()):
- 嵌套
{ key: [ ] }
[ { } ]
[ [ ] ]
{ { } } - print 若想不换行
print("ha",end= ' ') #以空格符替代结尾符号,本来默认是\n
用户输入
- input()
message = input("your name:")
用户输入返回给message
- 用户输入为字符串,int(message) 转换成数值
- 求模%
while语句
- while i <= 9:
active = True
while active:
...
if ... :
active = False
else:
...
- break, continue
函数
def fun():
"""这是一个函数 """ #表示注释
print("hello")
- 位置实参 fun(1, 2) 对应的就是如下a,b
def fun(a, b):
- 关键字实参
传递给函数的名称-值对
def fun(a, b):
print(a+" "+b)
fun(a = 'one', b = 'two')
- 默认值
def fun(a, b='two')
- 返回值 return, 可返回任意类型的值
- 让实参变成可选的
def fun(a, b, c=''):
- 在函数中修改传递进来的列表示永久性的
- 禁止函数修改列表,可以传入切片,原来的list不会改变
fun(list[:])
- 传递任意数量的实参,加一个*
all表示一个空元组
def fun(*all):
print(all)
fun() #()
fun("a") #('a',)
fun("a","b") #('a', 'b')
- 结合使用位置实参和任意数量实参,传递不同类型的实参
def fun(size, *all):
fun(1,"a")
fun(2,"a","b")
- 任意数量的关键字实参,用 **
def fun(**all):
dict = {}
for key, value in all.items():
dict[key] = value
print(dict)
fun(first='A', second='B'))
- 将函数存储在模块中
一个文件就是一个模块,可以直接import
#main.py
import test
test.fun()
#test.py
def fun():
print("hello")
- 导入特定函数
#main.py
from test import fun
fun()
#test.py
def fun():
print("hello")
- 使用as给函数指定别名
from test import fun as f
f()
- 用as给模块指定别名
import test as t
- 导入模块中的所有函数
from test import *
类
- 创建类
class Dog():
"""一只狗"""
def __init__(self, name, age):
"""初始化name和age"""
self.name = name
self.age = age
def sit(self):
print("sit")
- 创建实例
my_dog = Dog("haha", 6)
my_dog.sit()
- 继承
子类自动获得父类的所有属性和方法
class Haqi(Dog): #Dog是父类
def __init__(self, name, age):
super().__init__(name, age) #super指向父类
- 重写父类的方法
重写父类同名函数,在子类调用该函数时,会忽略父类的函数。 - 将实例用作属性 相当于C++中的类对象
class A():
def __init__(self, name):
self.name = name
class Age():
def __init__(self, age=10):
self.age = age
class B(A):
def __init__(self, name):
super().__init__(name)
self.age = Age()
- 导入类 from car(文件名) import Car(类名)
- 导入多个类, from car import Car, ElectricCar 用逗号隔开
文件和异常
- 直接读取read
with open("file/ok.txt") as file:
c = file.read()
print(c)
- c最后会多一个空行,用.rstrip()去掉
- 逐行读取
with open("ok.txt") as file:
for line in file:
print(line.rstrip())
- 创建一个包含文件各行内容的列表
with open("ok.txt") as file:
lines = file.readlines()
print(lines)
for line in lines:
print(line.rstrip())
- 写入空文件
with open("ok.txt", 'w') as file:
file.write("hello world")
- ‘w’ 写入模式 ‘r’ 读取模式 ‘a’ 附加模式,‘r+’ 读写都可
- python只能将字符串写入文本文件中
- 写入的时候不会自动添加换行符。
- try-except-else 代码块 处理异常
try:
answer = f/s
except ZeroDivisionError:
print("error")
else:
print(answer)
- FileNotFoundError 文件找不到触发异常
替换 ZeroDivisionError 即可 - split() 以空格为分割,将字符串分成多个部分
s = "a b," \
"c d"
print(s.split())
#['a', 'b,c', 'd']
- 处理异常时一声不吭
try:
answer = f/s
except ZeroDivisionError:
pass
- 加法运算,类型判断
try:
a = int(input("input a number:"))
b = int(input("input a number:"))
except:
print("error type")
else:
print(a + b)
存储数据
- 模块 json
使用 json.dump() 和 json.load()
import json
filename = "num.json"
num = input("input your favorite num:")
with open(filename, 'w') as file:
json.dump(num, file)
with open(filename, 'r') as file:
user = json.load(file)
print("i know it: "+ user)
测试代码
- unittest 模块
def fun(city, country):
return city + ',' + country
import unittest
from city_functions import fun
class NamesTestCase(unittest.TestCase):
def test_city_country(self):
formatted_name = fun('santiago', 'chile')
self.assertEqual(formatted_name, 'santiago,chile')
def test_city_country2(self):
formatted_name = fun('sa', 'ch')
self.assertEqual(formatted_name, 'sa,ch')
if __name__ == "__main__":
unittest.main()