四、基础语法
四、基础语法
4.1、变量
4.1.1、Python的表示规范
简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。Python中标识符的命名不是随意的,而是要遵守一定的命令规则
- 标识符是由字符(A~Z 和 a~z)、下划线和数字组成,但第一个字符不能是数字。
- 标识符不能和 Python 中的保留字相同。有关保留字,后续章节会详细介绍。
- Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符。
- 在 Python 中,标识符中的字母是严格区分大小写
- Python 语言中,以下划线开头的标识符有特殊含义
- Python 允许使用汉字作为标识符(不推荐)
标识符的命名,除了要遵守以上这几条规则外,不同场景中的标识符,其名称也有一定的规范可循,例如:
""" 1.当标识符用作模块名时,应尽量短小,并且全部使用小写字母,使用下划线分割多个字母,例如game_mian、game_register 等。 2.当表示符用作包的名称时,应尽量短小,也全部使用小写字母。不推荐使用下划线,例如 com.mr、com.mr.book 等。 3.当表示用作类名时,应采用单词首字母大写的形式。例如,定义一个图书类,可以命名为 Book。 4.函数名、类中的属性和方法,应全部使用小写字母,多个单词之间可以使用下划线分隔; 5.常量名应用全部使用大写字母,单词之间可以用下划线分割; """
4.1.2、Python的关键字
and | as | assert | break | class | continue |
---|---|---|---|---|---|
def | del | elif | else | except | finally |
for | from | False | global | if | import |
in | is | lambda | nonlocal | not | None |
or | pass | raise | return | try | True |
while | with | yield |
4.1.3、变量
变量名一段有名字的连续存储空间。我们通过定义变量来申请并命名这样的存储空间,并通过变量名的名字来使用这段存储空间。在编程语言中,将数据放入变量的过程叫做赋值(Assignment)。Python使用等号=作为赋值运算符、具体格式为:
变量名 = 任意类型的值
例如:
x = 10 y = 20 z = True x = "hello world"
python作为动态语言的代表,是不同于C语言等静态语言的变量存储原理的
![]()
x = 10 print(id(x)) x = 20 print(id(x))
4.2、基本语法
(1)注释
注释就是对代码的解释和说明,其目的是让人们能够更加轻松的了解代码。注释是编程写程序时,写程序的人给一个语句、程序段、函数等解释或提示、能提高程序代码的可读性。一般情况下,合理的代码注释应该站源代码的1/3左右。
注释只是为了提高公认阅读,不会被解释器执行。
Python 支持两种类型的注释,分别是单行注释和多行注释。
# 一、关于注释 # 注释的内容是不被Python解释器执行的内容,给别人做注释用的, 这是一个单行注释。 """ 这是一个多行注释 三引号里面的任何内容不会被执行 """
(2)语句分隔符
就像我们写作文一样,逗号、句号等语句分隔符是非常重要的,程序也一样,要想让解释器能读懂,语句和语句之间一定要有分隔符。在C、Java等语言的语法中规定,必须以分号作为语句结束的标识。Python也支持分号,同样用于一条语句的结束标识。但在Python中分号的作用已经不像C、Java中那么重要了,Python中的分号可以省略,主要通过换行来识别语句的结束。
(3)缩进
和其它程序设计语言(如 Java、C 语言)采用大括号“{}”分隔代码块不同,Python 采用冒号( : )和代码缩进和来区分代码块之间的层次。在 Python 中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始,而缩进的结束则表示此代码块的结束。
注意,Python 中实现对代码的缩进,可以使用空格或者 Tab 键实现。但无论是手动敲空格,还是使用 Tab 键,通常情况下都是采用 4 个空格长度作为一个缩进量(默认情况下,一个 Tab 键就表示 4 个空格)。
(4)Python编码规范(PEP 8)
1.格式化的快捷键 win用户control+alt+L mac用户option+command+L
Python 采用 PEP 8 作为编码规范,其中 PEP 是 Python Enhancement Proposal(Python 增强建议书)的缩写,8 代表的是 Python 代码的样式指南。下面仅给大家列出 PEP 8 中初学者应严格遵守的一些编码规则:
1、不要在行尾添加分号,也不要用分号将两条命令放在同一行
2、通常情况下,在运算符两侧、函数参数之间以及逗号两侧,都建议使用空格进行分隔。
3、使用必要的空行可以增加代码的可读性,通常在顶级定义(如函数或类的定义)之间空两行,而方法定义之间空一行,另外在用于分隔某些功能的位置也可以空一行。
4.3、基本数据类型
基本数据类型 1.整形 2.浮点型 3.布尔类型 4.字符串类型
4.3.1、整形和浮点型
- 整形
在Python中整数都属于整形,不同C语言会根据整数的大小将整形分类为short、int、long、longlong、四种类型,Python只有一种整形,即int类型,无论整形数字多大多小都属于int。
# Python内置函数: type: 查看某个数据的类型
x = 10 print(type(x)) # <class 'int'>
说到整形,就不得不提到整形数字之间进制
# 十六进制 print(0x11) print(0x111) # 二进制 print(0b101) print(0b1011) # 八进制 print(0o12) print(0o23) # 十进制转换为二进制 print(bin(3)) # 十进制转换为十六进制 print(hex(18)) # 十进制转换为八进制 print(oct(10))
- 浮点型
在Python中小数都属于浮点型(float),有两种表现方式
# 小数点形式 f = 3.14 print(f) # 3.14 print(type(f)) # <class 'float'> # 指数形式; aEn 或 aen """ 3.2E5 = 3.2×105,其中 3.2 是尾数,5 是指数。 2.7E-3 = 2.7×10-2,其中 2.7 是尾数,-3 是指数。 0.2E8 = 0.2×107,其中 0.2 是尾数,8 是指数。 """ f1 = 3.2E5 print(f1) # 320000.0 print(type(f1)) # <class 'float'> f2 = 3.2E-5 print(f2) # 3.2e-05 print(type(f1)) # <class 'float'> f3 = 3.1415926123456789876543217789 print(f3) # 双精度(double float,保留17为有效数字) print(type(f3)) # <class 'float'>
4.3.2、布尔类型
布尔类型(Boolean)是一种数据的类型,这种类型只有两种值,即"真"与"假"。在Python中用bool表示布尔类型,"真"用关键字"True"表示,"假"用False表示
print(4 == 2) # False print(5 > 1) # True name = "hao" print(name == "summer") # False print(1 == "1") # False
不光表达的结果是布尔值,任意都有自己的布尔值,这就涉及到布尔值的零值。
# 任意数据类型都有一个具体的布尔值为False,我们撑为零值。改类型的其他布尔值皆为True。 print(bool("")) # 字符串的零值 "" print(bool(0)) # 整形的零值 0 print(bool(False)) # 布尔类型的零值 False print(bool("0")) print(bool("-1")) print(bool("hao")) print(bool(-1)) print(bool(0.1))
4.3.3、字符串
字符串是有零个或多个字符组成的优先序列。字符的内容可以包含字母、标点、特殊符号、中文、日文等世界的所有字符
在Python中字符串是通过单引号''或者""双引号表示的。
s1 = "hi hao" print(si) s2 = "" print(s2) s3 = "学好Python" print(s3)
Python 字符串中的双引号和单引号没有任何区别!
(1)字符串的转义符
1.将一些普通的符号转为特殊符号
2.将一些特殊符号转换为普通符号
转义字符 | 说明 |
---|---|
\n | 换行符,将光标位置移到下一行开头。 |
\r | 回车符,将光标位置移到本行开头。 |
\t | 水平制表符,也即 Tab 键,一般相当于四个空格。 |
\a | 蜂鸣器响铃。注意不是喇叭发声,现在的计算机很多都不带蜂鸣器了,所以响铃不一定有效。 |
\b | 退格(Backspace),将光标位置移到前一列。 |
\ | 反斜线 |
' | 单引号 |
" | 双引号 |
\ | 在字符串行尾的续行符,即一行未完,转到下一行继续写。 |
s1 = "hello world \nhi all" print(s1) s2 = 'I\m hao' print(s2) s3 = "D:\\nythonProject\\nenv\\Scripts\\python.exe" print(s3)
(2)长字符串
# 长字符串防止单引号或者双引号不会导致解析错误 s = """" 白日依山尽 黄河入海流 """ print(s)
(3)格式化输出
print()函数的用法,这只是最简单最初级的形式,print()还有跟多的高级的玩法,拨入格式化输出。
# 字符串的格式化输入 name = "zhangsan" age = 18 gender = "男" # 所谓魔板或者格式化字符串: 将动态变化的值嵌入到字符串的某个位置中。 s6 = "姓名 zhangsan。 年龄 18。 性别 男。" # 占位符: %s: 给字符串占位置 %d: 给十进制整型数字占位置 %f: 给浮点型占位 s6 = "姓名 %s 年龄 %d 性别 %s" %(name,age,gender) #姓名 zhangsan 年龄 18 性别 男 print(s6)
在print()函数中,由引号保卫的是格式化字符串,它相当于一个字符串模板,可以防止一些转换说明(占位符)。本利的格式化字符串包含一个%s和%d说明符,他最终会被后面的name和age变量的值所替代。中间的%是一个分隔符,它前面是格式化字符串,后面是要输出的表达式。
print() 函数使用以%
开头的转换说明符对各种类型的数据进行格式化输出,具体请看下表。
转换说明符 | 解释 |
---|---|
%d、%i | 转换为带符号的十进制整数 |
%o | 转换为带符号的八进制整数 |
%x、%X | 转换为带符号的十六进制整数 |
%e | 转化为科学计数法表示的浮点数(e 小写) |
%E | 转化为科学计数法表示的浮点数(E 大写) |
%f、%F | 转化为十进制浮点数 |
%g | 智能选择使用 %f 或 %e 格式 |
%G | 智能选择使用 %F 或 %E 格式 |
%c | 格式化字符及其 ASCII 码 |
%r | 使用 repr() 函数将表达式转换为字符串 |
%s | 使用 str() 函数将表达式转换为字符串 |
(4)归属序列类型
字符串属于序列型,所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值锁在位置的编号(称为索引)访问它们。
s = "hello world"
python还支持索引值时负值,此类所用是从左向右技术,换句话说,从最后一个元素开始计算,从索引值-1开始,如图所示
序列类型支持的操作:
# 一个字符串是由若干个字符按顺序构成的
# 序列类型操作一: 通过索引获取值(支持正负索引) 语法格式对象[索引]
# 序列类型操作一: 切片操作 获取多个值 语法格式 数据对象[开始索引:结束索引]step=1
# 特点一: 左闭右开 顾头不顾尾
# 特点二: 步长默认为1即从左向右一个一个的切割
# 步长参数为正:代表从左向右切割 为负数从右向左切割
#(1)索引取值 s = "hello world" print(s[6]) print(s[10]) # (2)切片取值:序列类型对象[start: end : step] s = "hello world" print(s[1:4]) # ell :取索引1到索引3(左闭又开) print(s[1:]) # hell :start缺省,默认从0取 print(s[1:-1]) # ello world :end缺省,默认取到最后 print(s[6:9]) # ello worl print(s[-4:-2]) # wor print(s[-1:-4]) # or print(s[-1:-4:-1]) # dlr # 3.判断存在:Python中可以使用 in 关键字检查某元素是否为序列的成员 s = "hello world" print("hello" in s) # True # 4.支持两种类型相同的序列使用"+"运算符相加操作,他会将两个序列进行连接,但不会去除重复的元素。 # 使用数字 n 乘以一个序列会生成新的序列,器内容为原来列被重复 n 词的结果 s = "hello world" print(s) # hello world s = "*"*10 print(s) # **********
(5)内置方法(重点)
方法 | 作用 | 示例 | 输出 |
---|---|---|---|
upper |
全部大写 | "hello".upper() |
"HELLO" |
lower |
全部小写 | "Hello".lower() |
"hello" |
startswith() |
是否以a开头 | "Yuan".startswith("Yu") |
True |
endswith() |
是否以a结尾 | "Yuan".endswith("a") |
False |
isdigit() |
是否全数字 | '123'.isdigit() |
True |
isalpha() |
是否全字母 | 'hello123'.isalpha() |
False |
isalnum() |
是否全为字母或数字 | 'hello123'.isalnum() |
True |
strip() |
去两边空格 | " hi all \n".strip() |
"hi all" |
join() |
将多个字符串连接在一起 | "-".join(["hao","summer","hugo"]) |
"hao-summer-hugo" |
split() |
按某字符分割字符串,默认按空格分隔 | "hao-summer-hugo".split("-") |
['hao', 'sunmmer', 'hugo'] |
find() |
搜索指定字符串,没有返回-1 | "hello world".index("w") |
6 |
index() |
同上,但是找不到会报错 | "hello world".index("w") |
6 |
count() |
统计指定的字符串出现的次数 | "hello world".count("l") |
3 |
replace() |
替换old为new | 'hello world'.replace(‘world',‘python') |
"hello python" |
format() |
格式化方法 |
""" 任意数据对象.方法()实现对数据的某种操作 不同数据类型对象支持不同方法 字符串类型对象支持哪些方法 """ s1 = "hello" s2 = "HELLO" # 1.upper方法和lower方法 s3 = s1.upper() s4 = s2.lower() print(s3) # HELLO print(s4) # hello s5 = "hello world" s6 = "hi world" # 2.startswith和endswith: 判断字符串是否以什么开头和结尾 print(s5.startswith("hello")) # True print(s6.startswith("hello")) # False print(s6.startswith("hi wor")) # True print(s6.endswith("hi wor")) # False # 3.isdigit(): 判断字符串是否是一个数字字符串 s7 = "123" s8 = "123A" print(s7.isdigit()) # True print(s8.isdigit()) # False s9 = "123ASS&#" print(s9.isdigit()) # False 不能包含特殊符号 # 4.strip(): 去除两端空格和换行符号 s10 = "I am hao" print(s10) print(s10.strip()) name = input("请输入姓名").strip() print(name) # 5.split分割方法:将一个字符串分割成一个列表 s11 = "hi-all-hello-world" print(s11.split("-")) # ['hi', 'all', 'hello', 'world'] # 6. join方法:将一个列表中的字符串拼接成一个字符串 name_list = ['hi', 'all', 'hello', 'world'] s12 = "-".join(name_list) print(s12,type(12)) # hi-all-hello-world <class 'int'>
4.3.4、类型转换
i = int("3") print(i,type(i)) # 3 <class 'int'> s = str(3.14) print(s,type(s)) # 3.14 <class 'str'>
4.4、运算符
4.4.1、算数运算符
运算符 | 说 明 | 用法举例 | 等价形式 |
---|---|---|---|
= | 最基本的赋值运算 | x = y | x = y |
+= | 加赋值 | x += y | x = x + y |
-= | 减赋值 | x -= y | x = x - y |
*= | 乘赋值 | x *= y | x = x * y |
/= | 除赋值 | x /= y | x = x / y |
%= | 取余数赋值 | x %= y | x = x % y |
**= | 幂赋值 | x **= y | x = x ** y |
//= | 取整数赋值 | x //= y | x = x // y |
&= | 按位与赋值 | x &= y | x = x & y |
|= | 按位或赋值 | x |= y | x = x | y |
^= | 按位异或赋值 | x ^= y | x = x ^ y |
«= | 左移赋值 | x «= y | x = x « y,这里的 y 指的是左移的位数 |
»= | 右移赋值 | x »= y | x = x » y,这里的 y 指的是右移的位数 |
4.4.3、比较运算符
比较运算符 | 说明 |
---|---|
> | 大于,如果> 前面的值大于后面的值,则返回 True,否则返回 False。 |
< | 小于,如果< 前面的值小于后面的值,则返回 True,否则返回 False。 |
== | 等于,如果== 两边的值相等,则返回 True,否则返回 False。 |
>= | 大于等于(等价于数学中的 ≥),如果>= 前面的值大于或者等于后面的值,则返回 True,否则返回 False。 |
<= | 小于等于(等价于数学中的 ≤),如果<= 前面的值小于或者等于后面的值,则返回 True,否则返回 False。 |
!= | 不等于(等价于数学中的 ≠),如果!= 两边的值不相等,则返回 True,否则返回 False。 |
is | 判断两个变量所引用的对象是否相同,如果相同则返回 True,否则返回 False。 |
is not | 判断两个变量所引用的对象是否不相同,如果不相同则返回 True,否则返回 False。 |
4.4.4、逻辑运算符
逻辑运算符 | 含义 | 基本格式 | 说明 |
---|---|---|---|
and | 逻辑与运算 | a and b | 当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。 |
or | 逻辑或运算 | a or b | 当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。 |
not | 逻辑非运算 | not a | 如果 a 为真,那么 not a 的结果为假;如果 a 为假,那么 not a 的结果为真。相当于对 a 取反。 |
print(2>1 and 2==1) # False print(not 3<5) # False print(not (4<2) or 1==2) # True
值得注意的是逻辑运算符有一套很好玩的短路算法
print(2 and 1) # 1 print(0 and 1) # 0 print(0 or 1) # 1 print(3 or 5) # 3
4.5、输入输出函数
(1)print函数
print()用于打印输出,是python中最常见的一个函数。
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print """ print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. flush: whether to forcibly flush the stream. """ pass
(2)input函数
以上信息说明input函数在python中是一个内建函数,其从标准输入中读入一个字符串,并自动忽略换行符。也就是说所有形式的输入按字符串处理,如果想要得到其他类型的数据进行强制类型转化。
name = input("您的姓名:") age = input("您的年龄:") print(name,type(name)) print(age,type(age))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!