目录
我们学习Python,要写Python程序,那什么是程序呢?程序的目的是向计算机表达自己的意愿,这就和写文章一样,都是要表达自己的想法;
我们写文章,最基本的是不是要有文字,对应的就是Python的标识符概念;文章里面的逗号就好比Python的操作符,文章里的句子,就好比Python里面的语句;文章的句子是由很多逗号隔开的小句子,这相当于Pyton的表达式;语句是由表达式组成;文章的一大段落就相当于Python的语句块。
-
标识符
-
概念
-
标识符是编程时使用的名字,包括变量的名字、函数的名字、语句块的名字等等;Python解释器给我们内置了很多的关键字和函数,他们的名字都是标识符,比如print、id、in 等等; 当我们自定义变量或者函数的时候,需要给他们起个名字,我们起的名字就是属于标识符的概念;不管是我们自定义的名字,还是Python解释器内置的名字,都需要符合一个规范,不然解释器就会报错;
-
-
规范:
- 名称必需由数字、字母或下划线的组合
- 不能以数字开头;
- 区分大小写
- 当我们自定义标识符时,不能使用保留字(关键字、内置函数名)
- 以下划线开头的标识符有特殊含义
- "_"(单下划线)开头的标识符,如:
_xxx
,表示不能直接访问的类属性,需通过类提供的接口进行访问; - "__"(双下划线)开头的标识符,如:
__xx
,表示私有成员; - "__"(双下划线)开头和结尾的标识符,如:
__xx__
,表示 Python 中内置标识,如:__init__()
表示类的构造函数;
- "_"(单下划线)开头的标识符,如:
-
-
注释
- 注释语句是在程序代码中添加的一种特殊类型的语句;
- 用于提供对代码的解释、说明或备注,主要作用是为了增强代码的可读性和可维护性;
- 注释语句通常不会被编译器或解释器执行,而是被忽略或跳过。
- 单行注释:使用#号
- 多行注释:使用三个引号(''')或三个双引号(""")括起来
- Pycharm的注释快捷键:Ctrl+/
-
语句分隔符
- 语句分隔符是用于在编程语言中分隔不同语句的符号或字符;
- 它指示编译器或解释器在代码中的哪个位置结束一条语句,并开始解析下一条语句。
- 在Python中,语句之间的分隔符有两个:
换行符
和分号
,推荐换行符;
-
缩进
- 最外层代码是不能有空格缩进,否则报错;
- Python 不使用
{}
来控制类、函数、逻辑判断等,而是使用缩进
- 最外层代码是不能有空格缩进,否则报错;
-
pep8规范
- PEP 8是Python编程语言的官方编码风格指南,它提供了一套规范和建议,用于编写清晰、易读和一致的Python代码。
- 缩进和空格: 使用4个空格进行缩进,不要使用制表符(Tab)。
- 行的长度: 每行代码尽量不超过79个字符,对于长表达式或注释,可以适度延长到不超过72个字符。
- 命名规范: 使用全小写字母和下划线来命名变量、函数和模块。类名应该使用驼峰命名法,首字母大写。
- 空行: 使用空行来组织代码,例如在函数和类定义之间、函数内部的逻辑块之间使用空行。
- 导入规范: 在不同的行上导入不同的模块。避免使用通配符导入(
from module import *
),而是明确导入需要使用的函数、类或变量。 - 注释: 使用注释来解释代码的意图和功能。注释应该清晰、简洁,并遵循特定的注释规范。
- 函数和类定义: 在函数和类定义之间使用两个空行。函数定义应该包含文档字符串(docstring),用于描述函数的功能和参数。
- 代码布局: 使用合适的空格和空行来组织代码,使其易于阅读和理解。
- PEP 8并非强制性规范,但它是Python社区广泛接受的编码风格指南。
x=10 # 不规范 x = 10 # 规范 =左右留一个空格 updateuserprofile = "" # 变量命名不规范 updateUserProfile = "" # 变量命名规范 update_user_profile = "" # 变量命名规范
- PEP 8是Python编程语言的官方编码风格指南,它提供了一套规范和建议,用于编写清晰、易读和一致的Python代码。
-
语句与表达式
- 语句
- 语句是一条完整的执行指令;语句可以是赋值语句、条件语句、循环语句等;语句没有返回值;
-
`x = 5` 是一个赋值语句,将值 5 赋给变量 x,它没有返回值。
`y = x + 3 >4 ` 是一个赋值语句,将变量 x 的值加上 3,并将结果赋给变量 y,它也没有返回值。
`print(y)` 是一个打印语句,用于将变量 y 的值输出到控制台,它仅用于执行操作,没有返回值。
`type("hello")`函数调用,但是一个表达式,因为计算出结果了。
- 表达式:
- 表达式是由值、变量、运算符和函数调用组成的代码片段,它可以计算出一个值,表达式具有返回值,也可以作为其他表达式的一部分使用;
-
5+4 有返回值,是个表达式
`type("hello")`函数调用,但是一个表达式,因为有返回值。
- 表达式的核心就是数据与运算符的操作;运算符是做操作的,对什么数据做什么运算;数据与运算符构成了表达式,有了表达式进而才有了语句,才有了更加丰富的程序;
- 语句
-
数据类型
- 基本数据类型:
- 整型(int): 表示整数值,如42 和 -10
- 浮点数(float): 表示带有小数部分的实数值
- 布尔值(bool): 表示真(True)或假(False)的逻辑值
- 字符串(str): 表示文本数据,使用单引号或者双引号,或者三引号括起来
- 空值(None): 表示缺少值或空值的特殊对象。
- 高级数据类型:用于表示复杂数据结构的数据类型
- 列表(list):有序、可变、可重复的数据结构,使用[]表示,例如:
[123,"hello","hello",True,123]
- 元组(tuple):有序、不可变、可重复的数据结构,使用圆括号()表示;例如:
(123,"hello","hello",True,123)
- 字典(list):用于存储和组织数据的数据结构,使用大括号{}来表示;例如:{"name": "yuan", "age": 18, "height": 185, "weight": 70}
- 集合(set):是一个无序的不重复元素序列,集合中只能存储不可变数据类型;例如:{1,2}
- 列表(list):有序、可变、可重复的数据结构,使用[]表示,例如:
- 基本数据类型:
-
运算符
- 计算运算符,也叫科学运算符
- 比较运算符
-
赋值运算符:赋值运算符是用于将一个值或表达式赋给一个变量的运算符。它们用于在程序中给变量赋值,以便存储和操作数据。
-
逻辑运算符:逻辑运算符通常与条件语句(如
if
语句)一起使用,用于控制程序的流程和进行逻辑判断。它们可以用于组合多个条件,并根据这些条件的结果生成新的布尔值。 - 成员运算符:成员运算符是用于检查一个值是否存在于某个序列(例如列表、元组、字符串等)中的运算符。Python 提供了两个成员运算符:
in
和not in
。 -
运算符优先级
- 括号:
()
,最高优先级,用于控制表达式的执行顺序。 - 幂运算:
**
,次高优先级,用于进行指数运算。 - 正负号:
+
(正号)和-
(负号),用于表示正负数。 - 乘法、除法和取模运算:
*
、/
、//
(整除)和%
(取模)。 - 加法和减法运算:
+
和-
。 - 比较运算符:
<
、>
、<=
、>=
、==
(等于)、!=
(不等于)等。 - 逻辑运算符:
and
、or
、not
,用于逻辑运算。 - 赋值运算符:
=
,+=
,-=
,*=
,/=
,//=
,%=
,**=
等。
- 括号:
- 计算运算符,也叫科学运算符
-
关键字
- 概念
- 关键字是Python编程语言中保留的一些特殊词汇,它们不能用于其他用途。
- 自定义标识符时不能使用关键字;
- 内容:
-
def 定义函数或方法 class 定义类 lambda 定义匿名函数 True 真 False 假 if 条件判断 elif 条件判断 else 条件判断 for 循环结构 while 循环结构 continue 跳出循环 break 跳出循环 and 逻辑与 or 逻辑或 no 逻辑非 in 判断变量是否在序列中 not in 判断变量是否不在序列中 is 判断是否是同一个对象 try 用于捕捉异常 except 包含捕获异常后的操作代码块 finally 无论是否发生异常,都会执行finally中的代码块 raise 主动触发异常 global 将模块空间变量引入到局部空间修改 nonlocal 将本局部空间的外层空间变量引入到本层局部空间修改,用于嵌套函数内 None 表示什么也没有,它有自己的数据类型NoneType import 用于导入模块 import as 创建别名
-
- 概念
10.内置函数
1. 内置函数,是Python解释器提供,可以拿来直接使用;
2. 以下是简要描述内置函数的功能,后续还好详细讲解
bool() | 把数据转为布尔类型 | print(bool(1)) # True |
int() | 把整型字符串转为整型 | print(int("78")) # 78 |
float() | 把浮点型字符串转为浮点型 | print(float("78.8")) # 78.8 |
bin() | 将给的参数转换成二进制 | print(bin(10)) # 二进制:0b1010 |
otc() | 将给的参数转换成八进制 | print(oct(10)) # 八进制:0o12 |
hex() | 将给的参数转换成十六进制 | print(hex(10)) # 十六进制:0xa |
abs() | 返回绝对值 | print(abs(-2)) # 绝对值:2 |
divmode() | 返回商和余数 | print(divmod(20,3)) # 求商和余数:(6,2) |
round() | 四舍五入 | print(round(4.50)) # 五舍六入:4 |
pow(a, b) | 求a的b次幂, | print(pow(10,2,3)) # 如果给了第三个参数. 表示最后取余:1 |
sum() | 求和 | print(sum([1,2,3,4,5,6,7,8,9,10])) # 求和:55 |
min() | 求最小值 | print(sum([1,2,3,4,5,6,7,8,9,10])) # 求和:55 |
max() | 求最大值 | print(max(7,3,15,9,4,13)) #求最大值:15 |
list() | 将一个可迭代对象转换成列表 | print(list((1,2,3,4,5,6))) #[1, 2, 3, 4, 5, 6] |
tuple() | 将一个可迭代对象转换成元组 | print(tuple([1,2,3,4,5,6])) #(1, 2, 3, 4, 5, 6) |
reversed() | 将一个序列翻转, 返回翻转序列的迭代器 | print(reversed("你好呀") ) # 0x000001DE73B2AF80 |
slice() | 列表的切片 | print([1, 2, 3, 4, 5,][slice(1, 3, 1)] ) # [2, 3] |
str() | 将数据转化成字符串 | print(str(123)+'456') #123456 |
bytes() | 把字符串转化成bytes类型 | |
ord() | 输入字符找带字符编码的位置 | print(ord('a')) # 字母a在编码表中的码位:97 |
chr() | 输入位置数字找出对应的字符 | print(chr(65)) # 已知码位,求字符是什么:A |
ascii() | 是ascii码中的返回该值 不是就返回u | print(ascii("@")) #'@' |
repr() | 返回一个对象的string形式 | |
len() | 返回一个对象中的元素的个数 | |
sorted() | 对可迭代对象进行排序操作 | |
print() | 打印输出 | print("hello" ) # hello |
input() | 获取用户输出的内容 | |
hash() | 获取到对象的哈希值(int, str, bool, tuple) | |
获取到对象的哈希值(int, str, bool, tuple) | 用于打开一个文件, 创建一个文件句柄 | |
help() | 函数用于查看函数或模块用途的详细说明 | |
callable() : | 用于检查一个对象是否是可调用的. 如果返回True, object有可能调用失败, 但如果返回False. 那调用绝对不会成功 | |
dir() | 查看对象的内置属性, 访问的是对象中的__dir__()方法 | |
eval() | 执行字符串类型的代码. 并返回最终结果 | |
exec() | 执行字符串类型的代码 | |
compile() | 将字符串类型的代码编码. 代码对象能够通过exec语句来执行或者eval()进行求值 | |
range() | 生成数据 | |
next() | 代器向下执行一次, 内部实际使⽤用了__ next__()⽅方法返回迭代器的下一个项目 | |
iter() | 获取迭代器, 内部实际使用的是__ iter__()⽅方法来获取迭代器 | |
locals() | 返回当前作用域中的名字 | |
globals() | 返回全局作用域中的名字 | |
map() | 会根据提供的函数对指定序列列做映射(lamda) | |
all() | 可迭代对象中全部是True, 结果才是True | |
any() | 可迭代对象中有一个是True, 结果就是True | |
enumerate() | 获取集合的枚举对象 | |