# 单行注释
''' 多行注释 '''
关键字 | 名称 | 示例 |
---|---|---|
chr |
单个字符 | '', 'd' |
str |
字符串(多个chr) | 'dd', '你好' |
int |
整数 | 1,2,3,4 |
float |
浮点数 | 3.1415926 |
bool |
布尔 | Ture, False |
list |
列表 | [1,2,3,4] |
tuple |
元组 | ('name', 'age') |
dict |
字典 | {'name':'zzl'} |
set |
集合 | {'zzl', 'age', 'gender'} |
查看数据类型函数type(变量)
返回该变量的数据类型
数据类型转换函数int(num)
将num转换为整数类型float(num)
将num转换为浮点数类型bool(num)
将num转换为布尔类型str(num)
将num转换为字符串类型
注:
注:
注:当布尔值False转换为str后, 在转换为bool会变成True
语法 inp = input('提示文本')
注:输入结果为str数据类型,如须做其他操作可进行数据转换
1.默认输出
print('hello, world')
2.占位符输出
# %s 的s表示变量的数据类型
print('名字:%s,年龄:%s,性别:%s' % (name, age, sex))
3.推荐使用
print(f'名字:{name},年龄:{age},性别:{sex}')
+ - * / ** // %
前四个同其他编程语言用法相同
**
表示平方计算 5 ** 2 === 5的2次方
//
表示做除运算后取整%
取余运算
简写形式+= -= *= /= **= //+ %=
注:+
也可用于字符串拼接*
当任意一边为字符串时,则表示重复字符串
round(num, count)
表示对num四舍五入,并保留小数点后count位
> < >= <= = !=
常用函数
ord(chr)
返回该chr的ASCII码(只能为单个字符)chr(num)
返回该ASCII对应的字符and
,or
, not
运算符 | 含义 |
---|---|
and |
真真为真,其他为假(第一项为真则返回第二项的值,如第一项为假则返回第一项的值) |
or |
假假为假,其他为真(第一项为真,则返回第一项的值,如第一项为假,则返回第二项的值) |
not |
取反 |
in
,not in
运算符 | 含义 | 示例 |
---|---|---|
in |
判断某字符是否存在于某字符串 | 'h' in 'hello' |
not in |
判断某字符是否不存在于某字符串 | 'h' not in 'hello' |
单分支
# 注意缩进
if bool表达式:
print('执行')
双分支
# 注意缩进
if bool表达式:
print('执行语句1')
else:
print('执行语句2')
分支嵌套
# 注意缩进
if bool表达式:
if bool表达式2:
print('执行嵌套语句')
else:
print('执行语句1')
else:
print('执行语句2')
多分支
# 注意缩进
if bool表达式1:
print('执行语句1')
elif bool表达式2:
print('执行语句2')
elif bool表达式...:
print('执行语句...')
else:
print('如上都不满足,则执行这条语句')
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:810735403
循环控制
只能在循环语句中使用,只对距离最近的循环起作用
break # 跳出本循环
continue # 结束本次循环,执行下一次循环
while循环
# 注意判断条件
while bool表达式:
print('执行语句')
for循环
# range(start, end, rule) 从start开始,到end-1,间隔为rule,rule的正负表示正序或倒序
# range(1, 11) 输出1~10,不包括最大值11
# range(1, 11, 2) 输出1~10,不包括最大值11, 第三个参数表示为每次间隔2
# range(11, 1, -2) 输出11~2,不包括最小值值1, 第三个参数为负数,则表示为倒序且每次间隔2
# range(5) 简写形式,0~5的范围
for i in range(1,11):
print(i)
循环else结构
只有循环完整执行完毕后,才会执行else语句
当循环过程中执行break语句后,else将不执行
# while
while bool表达式:
print('执行语句')
else:
print('while else语句')
# for
for i in range(10):
print('执行语句')
else:
print('for else语句')
对象是存储单个数据的容器,而列表(数组)就是存储多个数据的容器,任何数据类型都可以存放
# 字面量创建新列表
lst = [1,'2','三']
# 使用list函数创建新列表
lst = list([1,'2','三'])
list[start:end:step]
从start索引位置开始,截取到end-1位置结束,步长为step
其中step可为负值,表示从start位置往左边截取开始
start默认值为0
end默认值为列表长度
step默认值为1
省略参数但 : 必须存在 list[::]
增加
append(item)
lst = [10, 20, 30]
lst.append(100)
print(lst) # [10, 20, 30, 100]
extend( [] )
lst = [10, 20, 30]
lst.extend([99, 100])
print(lst) # [10, 20, 30, 99, 100]
insert(index, item)
lst = [10, 20, 30]
lst.insert(1, 99)
print(lst) # [10, 99, 20, 30]
lst = [10, 20, 30]
lst[1:] = [99]
print(lst) # [10, 99]
删除
remove(item)
lst = [10, 20, 30]
lst.remove(20)
print(lst) # [10, 30]
pop(index)
lst = [10, 20, 30]
lst.pop(1)
print(lst) # [10, 30]
clear()
lst = [10, 20, 30]
lst.clear()
print(lst) # []
lst = [10, 20, 30]
lst[1:] = []
print(lst) # [10]
lst = [10, 20, 30]
del lst
print(lst) # 会抛出异常, lst is not defined
修改
lst = [10, 20, 30]
lst[1] = 40
print(lst) # [10, 40, 30]
lst = [10, 20, 30]
lst[1:3] = [40, 50, 60]
print(lst) # [10, 40, 50, 60]
sort()
# sotr()
lst = [9, 3, 2, 8]
lst.sort()
print(lst) # [2, 3, 8, 9]
# sotr(reserse=True)
lst = [9, 3, 2, 8]
lst.sort(reserse=True)
print(lst) # [9, 8, 3, 2]
# sotr(reserse=False)
lst = [9, 3, 2, 8]
lst.sort(reserse=False)
print(lst) # [2, 3, 8, 9]
sorted(lst[,rule ])
# sorted(lst)
lst = [9, 3, 2, 8]
new_list = sorted(lst)
print(new_list) # [2, 3, 8, 9]
# sorted(lst, reserse=True)
lst = [9, 3, 2, 8]
new_lsit = sorted(lst, reserse=True)
print(new_list) # [9, 8, 3, 2]
# sorted(lst, reserse=False)
lst = [9, 3, 2, 8]
new_lsit = sorted(lst, reserse=False)
print(new_list) # [2, 3, 8, 9]
[i for i in renge(1, 11)]
lst = [i*i for i in renge(1, 6)]
print(lst) # [1, 4, 9, 16, 25]
python的内置数据结构之一,以键值对的方式存储数据。在其他语言中也叫对象。
info = {'name':'zzl', 'age':18}
info = dict(name='zzl', age=18)
info = {'name':'zzl', 'age':18}
# []方式
print(info['name']) # zzl
print(info['sex']) # error: keyError
# get()方式
print(info.get('name')) # zzl
print(info.get('sex')) # None
print(info.get('sex', '男')) # 如果sex字段为None的话,则打印 '男' 默认值
in
, not in
info = {'name':'zzl', 'age':18}
# in
print('name' in info) # True
# not in
print('sex' nor in info) # True
info = {'name':'zzl', 'age':18}
del info['name'] # 删除name字段
print(info) # {'age':18}
info.clear() # 清空该字典
print(info) # {}
info = {'name':'zzl', 'age':18}
info['sex'] = '男'
print(info) # {'name':'zzl', 'age':18, 'sex':'男'}
info = {'name':'zzl', 'age':18}
info['age'] = 20
print(info) # {'name':'zzl', 'age':20}
keys()
info = {'name':'zzl', 'age':18}
keys = info.keys()
print(keys) # ['age', 'name']
values()
info = {'name':'zzl', 'age':18}
values = info.value()
print(values) # [18, 'zzl']
items()
info = {'name':'zzl', 'age':18}
itmes = info.items()
print(items) # [('age', 18), ('name', 'zzl')]
info = {'name':'zzl', 'age':18}
for item in info:
print(item,info[item])
# age 'zzl'
# name 18
items = ['Fruits', 'Books', 'Others']
prices = [98, 97, 95]
d = { item:price for item, price in zip(items, prices) }
print(d) # {'Others': 95, 'Books': 97, 'Fruits': 98}
字典的特点
列表的另一种形式,是不可变序列
# 直接用小括号书写
t = ('python', 'world', '20')
# 使用内置函数tuple()
t1 = tuple( ('python', 'world', '20') )
t3 = ('python',) # 如果元组只有一个元素,则在元素后面加上 ,
# 获取元组的元素
t[0] # python
t = ('python', 'world', '20')
for item in t:
print(item)
# python
# world
# 20
注:
python语言提供的内置数据结构
与列表、字典都属于可变类型的序列
集合是没有value的字典
集合的存储是无序的
# 集合的value不能重复
s = {2, 3, 4, 5, 2, 4}
print(s) # {2,3,4,5}
# set()函数
s1 = set(range(6))
print(s1) # set([0, 1, 2, 3, 4, 5])
s2 = set([1,2,3,5,6,4,3])
print(s2) # set([1, 2, 3, 4, 5, 6])
s3 = set((1,23,5,32,1))
print(s3) # set([32, 1, 5, 23])
s4 = set('python')
print(s4) # set(['h', 'o', 'n', 'p', 't', 'y'])
s5 = set({12,4,23,4,12})
print(s5) # set([12, 4, 23])
# 定义集合
s6 = set()
s = {10, 20, 30, 40, 50}
# 判断是否存在
print(10 in s) # True
print(70 in s) # False
# 新增
s.add(80)
print(s) # {10, 20, 30, 40, 50, 80}
# 新增多个
s.update({200, 400})
print(s) # {10, 20,, 200, 30, 40, 50, 400, 80}
# 删除
s.remove(10)
print(s) # {20,, 200, 30, 40, 50, 400, 80}
s.remove(900) # error: keyError
s.discard(900) # 如果有则删除900, 没有也不会报错
s.pop() # 随机删除一个, 不能传参
s.clear() # 清空集合
两个集合是否相等(判断集合中的元素是否完全相等)
s1 = {10, 20, 30, 40}
s2 = {20, 40, 10, 20}
print(s1 == s2) # True
print(s1 != s2) # False
一个集合是否是另一个集合的子集
假如集合s1的元素里包括集合s2的全部元素,则s2是s1的子集
s1 = {10, 20, 30, 40}
s2 = {20, 40}
print(s2.issubset(s1)) # True
一个集合是否是另一个集合的超集
与上相反,假如集合s1的元素里包括集合s2的全部元素,则s1是s2的超集
s1 = {10, 20, 30, 40}
s2 = {20, 40}
print(s1.issuperset(s2)) # True
一个集合和另一个集合是否无交集
如果一个集合里某个元素,在另一个集合里也有存储,则两个集合有交集
s1 = {10, 20, 30, 40}
s2 = {80, 60}
print(s1.isdisjoint(s2)) # False 无交集
方法名称 | 作用 |
---|---|
index() | 查找子串第一次出现的位置,如果查找的子串不存在时,则抛出ValueError |
rindex() | 查找子串最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError |
find() | 查找子串第一次出现的位置,如果查找的子串不存在时,则返回-1 |
rfind() | 查找子串最后一次出现的位置,如果查找的子串不存在时,则返回-1 |
方法名称 | 作用 |
---|---|
upper() | 把字符串中所有字符都转成大写字母 |
lower() | 把字符串中所有字符都转成小写字母 |
swapcase() | 把字符串中所有大写字母转成小写字母,把所有小写字母转成大写字母 |
capitalize() | 把第一个字符转换为大写,其余字符小写 |
title() | 把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写 |
方法名称 | 作用 |
---|---|
center() | 居中对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度,则返回原字符串 |
ljust() | 左对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度,则返回原字符串 |
rjust() | 右对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认是空格,如果设置宽度小于实际宽度,则返回原字符串 |
zfill() | 右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果设置宽度小于实际宽度,则返回原字符串 |
方法名称 | 作用 |
---|---|
split(cha, max) | 从字符串的左边开始分割,默认分割符是空格,返回值是一个列表,第一个参数为分割符,第二个参数为最大分割次数 |
split(cha, max) | 从字符串的右边开始分割,默认分割符是空格,返回值是一个列表,第一个参数为分割符,第二个参数为最大分割次数 |
方法名称 | 作用 |
---|---|
isidentifier() | 判断指定字符串是不是合法的标识符 |
isspace() | 判断指定字符串是否由空白字符组成(回车、换行、水平制表符tab) |
isalpha() | 判断指定字符串是否全部由字母组成 |
isdecimal() | 判断指定字符串是否全部由十进制的数字组成 |
isnumeric() | 判断指定字符串全部由数字组成 |
isalnum() | 判断指定字符串是否全部由字母和数字组成 |
方法名称 | 作用 |
---|---|
replace() | 第1个参数指定被替换的子串 第2个参数指定替换子串的字符串 该方法返回替换后的字符串,替换前的字符串不会发生变化 该方法的第3个参数可以指定最大替换次数 |
cha.join(lst) | 用cha 将列表后元组的字符串合并成一个字符串。使用方法为cha.join(lst) |
# %s 的s表示数据类型 s:字符串 i:整数
print('我叫%s,我今年%i岁' % ('zzl', 18)) # 我叫zzl,我今年18岁'
# {}里的数字表示后面变量的索引,可重复使用
print('我叫{0},我今年{1}岁,我真的叫{0}'.format('zzl', 18)) # 我叫zzl,我今年18岁,我真的叫zzl'
# 前面加f 可在{}中直接填写变量
print(f'我叫{'zzl'},我今年{18}岁') # 我叫zzl,我今年18岁'
# 编码
s = '好好学习,天天向上'
# 使用GBK格式进行编码, 此格式中,一个中文占两个字节
print(s.encode(encoding='GBK')) #b'\xba\xc3\xba\xc3\xd1\xa7\xcf\xb0\xa3\xac\xcc\xec\xcc\xec\xcf\xf2\xc9\xcf'
# 使用UTF-8格式进行编码 此格式中,一个中文占三个字节
print(s.encode(encoding='UTF-8')) #b'\xe5\xa5\xbd\xe5\xa5\xbd\xe5\xad\xa6\xe4\xb9\xa0\xef\xbc\x8c\xe5\xa4\xa9\xe5\xa4\xa9\xe5\x90\x91\xe4\xb8\x8a'
# 解码 (使用什么格式编码,就必须使用什么格式解码,否则会报错)
# 使用GBK格式进行编码
print(s.encode(encoding='GBK').decode(encoding='GBK')) # 好好学习,天天向上
# 使用UTF-8格式进行编码
print(s.encode(encoding='UTF-8').decode(encoding='UTF-8')) # 好好学习,天天向上
# 定义
def 函数名(a, b): # 参数a和b
函数体
return # 返回值
# 使用
函数名()
# 代码演示
def cals(a, b):
c = a + b
return c
res = cals(20, 30) # 50
函数的参数传递
cals(20, 30)
,此时a的值是20, b的值是30cals(b=70, a=30)
此时a的值是30, b的值是70def fun(lst):
odd = [] # 存放奇数
even = [] # 存放偶数
for i in lst:
if (i%2) :
odd.append(i)
else:
even.append(i)
return odd,even
lst = [10, 23, 65, 78, 32, 77]
print(fun(lst)) # ([23, 65, 77], [10, 78, 32])
在定义函数的时候,可以给形参赋上默认值,当没传参数的时候,函数会取默认值,如果传参和默认值同时存在,传的参数会替换掉默认值
def cals(a, b = 10):
c = a + b
return c
res = cals(20) # 30
res = cals(20, 30) # 50
def fun(*args);
print(args)
fun(1) # (1,)
fun(1,2,3) # (1, 2, 3)
def fun(**args);
print(args)
fun(a=10) # {'a':10}
fun(a=10, b=20, c=30) # {'a':10, 'b':20, 'c':30}
以上参数在函数定义时,一种方式只能定义一次。
当两种参数定义方式同时存在时,位置形参必须在关键字形参前面
try:
可能出现异常的语句放在这里
except 你要捕获的异常类型:
捕获到异常后你想做什么
except 你要捕获的异常类型:
捕获到异常后你想做什么
...
except BaseException as e: # 这种情况是以上异常类型都没捕获到,则执行这块代码
print('出错了', e)
print('程序照常执行')
try:
可能出现异常的语句放在这里
except 你要捕获的异常类型:
捕获到异常后你想做什么
except 你要捕获的异常类型:
捕获到异常后你想做什么
...
except BaseException as e: # 这种情况是以上异常类型都没捕获到,则执行这块代码
print('出错了', e)
else:
print('如果没有异常则执行else部分')
try:
a = int(input('请输入第一个整数'))
b = int(input('请输入另一个整数'))
res = a/b
except BaseException as e:
print('出错了', e)
else:
print('结果为:'res)
finlly:
print('无论是否产生异常,总会被执行的代码')
异常类型 | 描述 |
---|---|
ZeroDivisionError | 除零or向零取余 |
IndexError | 序列中没有此索引 |
KeyError | 映射中没有这个键 |
NameError | 未声明or未定义 |
SyntaxError | 语法错误 |
ValueError | 传入无效的参数 |
@classmethod
修饰的方法,可使用类名直接访问@staticmethod
修饰的方法,可使用类名直接访问# Stubent为类的名称,由一个或多个单词组成。(建议类名书写方式为每个单词首字母大写)
class Student:
native_pace = '河南' # 直接写在类里的变量,称为属性
# 初始化函数( 构造函数 )
def __init__(self, name ,age):
# 创建实例的时候 对name和age属性进行赋值
self.name = name
self.age = age
# 定义在类里面的方法为实例方法
def eat(self):
print('吃饭')
# 静态方法 (静态方法里不允许写self)
@staticmethod
def method():
print('使用staticmethod进行修饰,所以我是静态方法')
# 类方法
@classmethod
def cm(cls):
print('使用calssmethod进行修饰,所以我是类方法')
# 类实例创建语法 stu = Student()
# 假设已存在上面的 Student 类
# stu1就是Student类的实例对象,该实例对象中可以访问到类中的属性和方法
stu1 = Student('zzl', 18) # 创建实例
print(stu1.name) # zzl
print(stu1.age) # 18
stu1.eat() # 吃饭
# 假设已存在Student类
stu = Student('zzl', 18)
# 绑定 gender 属性
stu.gender = '男'
print(stu.gender) # 男
# 绑定 show 方法
def show():
print('show方法执行')
stu.show = show
stu.show() # show方法执行
封装 (提高程序的安全性)
将数据(属性)和行为(方法)封装到类对象中,在方法内部对属性进行操作,在类对象的外部调用方法。这样无需关心方法内部的具体实现细节,从而隔离了复杂度。在python中没有专门的修饰符用户属性的私有化,如果该属性不想被类对象访问,可以在属性名前面加两个 ‘_’
继承
多态
代码演示
# 继承
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def info(self):
print(self.name, self.age)
class Student(Person):
def __init__(self, name, age, stu_no):
super().__init__(name, age)
self.stu_no = stu_no
class Teacher(Person):
def __init__(self, name, age, teachofyear):
super().__init__(name, age)
self.teachofyear = teachofyear
stu = Student('张三', 20, 10001)
teacher = Teacher('李四', 35, 10)
stu.info() # 张三 20
teacher.info() # 李四 35
# python 支持多继承
class A(class1, class2):
pass
# 方法重写
# 方法重写就是在子类里定义与父类重名的方法,这样就会优先调用子类的定义的方法
定义:每一个.py文件就是一个模块
使用模块化的好处
# 导入模块
import 模块名称 [as 别名]
# 导入模块中的指定函数(or 变量 or 类)
from 模块名称 import 函数/变量/类
包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下
作用
包与目录的区别
包的导入import 包名.模块名
# file = open( filename, [mode, encoding] )
# 假设有一个名为a的文本文件,里面有hello world
file = open('a.txt', 'r')
print(file.readlines()) # ['hello world']
file.close()
打开模式 | 描述 |
---|---|
r | 以只读模式打开文件,文件的指针将会放在文件的开头 |
w | 以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的开头 |
a | 以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容 |
b | 以二进制方式打开文件,不能单独使用,需要与其他模式一起使用,rb,后者wb |
+ | 以读写方式打开文件,不能单独使用,需要与其他模式一起使用,如a+ |
方法名 | 描述 |
---|---|
read([size]) | 从文件中读取size个字节或字符的内容返回,若省略size,则读取到文件末尾,即一次读取文件所有内容 |
readline() | 从文本文件中读取一行内容 |
readlines() | 把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回 |
write(str) | 将字符串str内容写入文件 |
writelines(s_list) | 将字符串列表s_list写入文本文件,不添加换行符 |
seek(offset[, whence]) | 把文件指针移动到新的位置,offset表示相对与whence的位置: offset:为正则往结束方向移动,为负则往开始方向移动 whence不同的值代表不同含义: 0:从文件头开始计算(默认值) 1:从当前位置开始计算 2:从文件末尾开始计算 |
tell() | 返回文件指针的当前位置 |
flush() | 把缓冲区的内容写入文件,但不关闭文件 |
close() | 把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源 |
with语句可以自动管理上下文资源,不论什么原因跳出with语句都能确保文件正确的关闭,以此来达到释放资源的目的
# with使用
with open(filename, mode) as file:
pass
import os
# 打开计算器
os.system('calc.exe')
# 打开记事本
os.system('notepad.exe')
# 打开可执行文件
os.startfile('路径')
os模块操作目录相关函数
函数 | 说明 |
---|---|
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回指定路径下的文件和目录信息 |
mkdir(path[, mode]) | 创建目录 |
makedirs(path1/path2…[, mode]) | 创建多级目录 |
rmdir(path) | 删除目录 |
removedirs(path1/path2…) | 删除多级目录 |
chdir(path) | 将path设置为当前工作目录 |
os.path模块操作目录相关函数
函数 | 说明 |
---|---|
abspath(path) | 用于获取文件或目录的绝对路径 |
exists(path) | 用于判断文件或目录是否存在,如果存在返回True,否则返回False |
join(path, name) | 将目录与目录,或者目录与文件名连接起来 |
split(path) | 分离目录和文件名 |
splittext(name) | 分离文件名和扩展名 |
basename(path) | 从一个目录中提取文件名 |
dirname(path) | 从一个路径中提取文件路径,不包括文件名 |
isdir(path) | 判断是否为路径 |
使用import
关键字引入
模块 | 描述 |
---|---|
random | 随机数生成 |
traceback | 处理异常 |
sys | 与python解释器及环境操作相关的标准库 |
time | 提供与时间相关的各种函数的标准库 |
os | 提供了访问操作系统服务功能的标准库 |
calendar | 提供与日期相关的各种函数的标准库 |
urllib | 用于读取来自网上(服务器)数据的标准库 |
json | 用于使用JSON序列化和反序列化对象 |
re | 用于在字符串中执行正则表达式匹配和替换 |
math | 提供标准算术运算函数的标准库 |
decimal | 用于进行精准控制运算精度、有效数位和四舍五入操作的十进制运算 |
logging | 提供了灵活的记录事件、错误、警告和调试信息等日志信息的功能 |
在这里还是要推荐下我自己建的Python开发交流学习(qq)群:810735403,群里都是学Python开发的,如果你正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和高级开发教程,欢迎进阶中和想深入Python的小伙伴!