day 01 1.3 Python基础语法
三、基础语法
3.1、变量
3.1.1、python的标识符规范
简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。Python中标识符的命名不是随意的,而是要遵守一定的命令规则
- 标识符是由字符(A~Z 和 a~z)、下划线和数字组成,但第一个字符不能是数字。
- 标识符不能和 Python 中的保留字相同。有关保留字,后续章节会详细介绍。
- Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符。
- 在 Python 中,标识符中的字母是严格区分大小写
- Python 语言中,以下划线开头的标识符有特殊含义
- Python 允许使用汉字作为标识符(不推荐)
标识符的命名,除了要遵守以上这几条规则外,不同场景中的标识符,其名称也有一定的规范可循,例如:
'''
- 当标识符用作模块名时,应尽量短小,并且全部使用小写字母,使用下划线分割多个字母,例如 game_mian、game_register 等。
- 当标识符用作包的名称时,应尽量短小,也全部使用小写字母,不推荐使用下划线,例如 com.mr、com.mr.book 等。
- 当标识符用作类名时,应采用单词首字母大写的形式。例如,定义一个图书类,可以命名为 Book。
- 模块内部的类名,可以采用 "下划线+首字母大写" 的形式,如 _Book;
- 函数名、类中的属性名和方法名,应全部使用小写字母,多个单词之间可以用下划线分割;
- 常量命名应全部使用大写字母,单词之间可以用下划线分割;
'''
3.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 |
3.1.3、变量
变量是一段有名字的连续存储空间。我们通过定义变量来申请并命名这样的存储空间,并通过变量的名字来使用这段存储空间。在编程语言中,将数据放入变量的过程叫做赋值(Assignment)。Python 使用等号=
作为赋值运算符,具体格式为:
变量名 = 任意类型的值
例如:
x = 10
y = "hello,yuan"
z = True
x = "hello world"
python作为动态语言的代表,是不同于C语言等静态语言的变量存储原理的
x = 10
print(id(x))
x = 20 # 内存变化
print(id(x))
思考,为什么要用变量?
# 为什么要有变量
# 案例1
a = 10
b = 20
print(a + b)
print(a - b)
print(a * b)
print(a / b)
# 案例2
text = "Hello World"
print(text)
print("Hello World".upper())
print("Hello World".lower())
3.2、基本语法
(1)注释
注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。一般情况下,合理的代码注释应该占源代码的 1/3 左右。
注释只是为了提高公认阅读,不会被解释器执行。
Python 支持两种类型的注释,分别是单行注释和多行注释。
# 单行注释
"""
这是一个多行注释
三引号里面的任何内容不会被解释器执行
"""
(2)语句分隔符
就像我们写作文一样,逗号、句号等语句分隔符是非常重要的,程序也一样,要想让解释器能读懂,语句和语句之间一定要有分隔符。在C、Java等语言的语法中规定,必须以分号作为语句结束的标识。Python也支持分号,同样用于一条语句的结束标识。但在Python中分号的作用已经不像C、Java中那么重要了,Python中的分号可以省略,主要通过换行来识别语句的结束。
(3)缩进
和其它程序设计语言(如 Java、C 语言)采用大括号“{}”分隔代码块不同,Python 采用冒号( : )和代码缩进和来区分代码块之间的层次。在 Python 中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始,而缩进的结束则表示此代码块的结束。
注意,Python 中实现对代码的缩进,可以使用空格或者 Tab 键实现。但无论是手动敲空格,还是使用 Tab 键,通常情况下都是采用 4 个空格长度作为一个缩进量(默认情况下,一个 Tab 键就表示 4 个空格)。
(4)Python编码规范(PEP 8)
Python 采用 PEP 8 作为编码规范,其中 PEP 是 Python Enhancement Proposal(Python 增强建议书)的缩写,8 代表的是 Python 代码的样式指南。下面仅给大家列出 PEP 8 中初学者应严格遵守的一些编码规则:
1、不要在行尾添加分号,也不要用分号将两条命令放在同一行
2、通常情况下,在运算符两侧、函数参数之间以及逗号两侧,都建议使用空格进行分隔。
3、使用必要的空行可以增加代码的可读性,通常在顶级定义(如函数或类的定义)之间空两行,而方法定义之间空一行,另外在用于分隔某些功能的位置也可以空一行。
3.3、基本数据类型
3.3.1、整型和浮点型
在python中整数都属于整型,不同于C语言会根据整数的大小将整型分类为short、int、long、long long 四种类型,python只有一种整型,即int
类型,无论整型数字多大多小都属于int
。
x = 10
print(type(x)) # <class 'int'>
在python中小数都属于浮点型(float
),有两种表现形式
# 小数点形式
f = 3.14
print(f) # 3.14
print(type(f)) # <class 'float'>
3.3.2、布尔类型
布尔型(Boolean)是一种数据的类型,这种类型只有两种值,即"真"与"假"。在python中用 bool
表示布尔类型,"真"用关键字true
表示,"假"用false
表示。
print(4 == 2) # False
print(5 > 1) # True
name = "yuan"
print(name == "alvin") # 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("yuan"))
print(bool(-1))
print(bool(0.1))
3.3.3、字符串
字符串是由零个或多个字符组成的有限序列。字符串的内容可以包含字母、标点、特殊符号、中文、日文等全世界的所有字符。
在python中字符串是通过单引号''
或者双引号""
标识的。
s1 = "hi yuan"
print(s1)
s2 = ""
print(s2)
s3 = 'yuan老师是最帅的老师!'
print(s3)
Python 字符串中的双引号和单引号没有任何区别!
(1)字符串的转义符
转义字符 | 说明 |
---|---|
\n | 换行符,将光标位置移到下一行开头。 |
\r | 回车符,将光标位置移到本行开头。 |
\t | 水平制表符,也即 Tab 键,一般相当于四个空格。 |
\a | 蜂鸣器响铃。注意不是喇叭发声,现在的计算机很多都不带蜂鸣器了,所以响铃不一定有效。 |
\b | 退格(Backspace),将光标位置移到前一列。 |
\ | 反斜线 |
' | 单引号 |
" | 双引号 |
\ | 在字符串行尾的续行符,即一行未完,转到下一行继续写。 |
s1 = "hi yuan\nhi,alvin"
print(s1)
s2 = 'I\'m yuan'
print(s2)
s3 = "D:\\nythonProject\\nenv\\Scripts\\python.exe"
print(s3)
(2)长字符串
s = """
s = "hi yuan\\nhi,alvin"
I'm yuan\n
这是一个python解释器路径:"D:\\nythonProject\\nenv\Scripts\python.exe"
长字符串中放置单引号或者双引号不会导致解析错误
"""
print(s)
(3)格式化输出
之前讲到过 print() 函数的用法,这只是最简单最初级的形式,print() 还有很多高级的玩法,比如格式化输出。
name = "yuan"
age = 23
print("My name is %s; My age is %d" % (name, age))
print(f"My name is {name}; My age is {age}")
在 print() 函数中,由引号包围的是格式化字符串,它相当于一个字符串模板,可以放置一些转换说明符(占位符)。本例的格式化字符串中包含一个%s
和%d
说明符,它最终会被后面的name和age 变量的值所替代。中间的%
是一个分隔符,它前面是格式化字符串,后面是要输出的表达式。
(4)序列类型操作
字符串属于序列类型,所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。
s= "hello yuan"
print(len(s))
Python 还支持索引值是负数,此类索引是从右向左计数,换句话说,从最后一个元素开始计数,从索引值 -1 开始,如图 所示。
序列类型支持的操作:
# (1)索引取值
s = "hello yuan"
print(s[6])
print(s[-10])
# (2)切片取值:序列类型对象[start : end : step]
s = "hello yuan"
print(s[1:4]) # ell :取索引1到索引3(左闭又开)
print(s[:4]) # hell :start缺省,默认从0取
print(s[:]) # ello yuan : end缺省,默认取到最后
print(s[1:-1]) # ello yua
# (3)判断存在:Python 中,可以使用 in 关键字检查某元素是否为序列的成员。
s = "hello yuan"
print("yuan" in s) # True
# (4)支持两种类型相同的序列使用“+”运算符做相加操作,它会将两个序列进行连接,但不会去除重复的元素。
# 使用数字 n 乘以一个序列会生成新的序列,其内容为原来序列被重复 n 次的结果
s = "hello"+" yuan"
print(s) # hello yuan
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 |
strip() |
去两边空格 | " hi yuan \n".strip() |
"hi yuan" |
join() |
将多个字符串连接在一起 | "-".join(["yuan","alvin","eric"]) |
"yuan-alvin-eric" |
split() |
按某字符分割字符串,默认按空格分隔 | "yuan-alvin-eric".split("-") |
['yuan', 'alvin', 'eric'] |
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" |
# 任意数据对象.方法()实现对数据的某种操作
# 不同数据类型对象支持不同方法
# 字符串类型对象支持哪些方法
s1 = "yuan"
s2 = "RAIN"
# (1) upper方法和lower方法
s3 = s1.upper()
s4 = s2.lower()
print(s3) # "YUAN"
print(s4) # "rain"
s5 = "hello yuan"
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 = "123SAA%#"
print(s9.isalnum()) # False 不能包含特殊符号
# (4) strip(): 去除两端空格和换行符号
s10 = " I am yuan "
print(s10)
print(s10.strip())
name = input("请输入姓名>>").strip()
print(name)
# (5) split分割方法: 将一个字符串分割成一个列表
s11 = "rain-yuan-alvin-eric"
print(s11.split("-")) # ['rain', 'yuan', 'alvin', 'eric']
# (6) join方法: 将一个列表中的字符串拼接成一个字符串
names_list = ['rain', 'yuan', 'alvin', 'eric']
s12 = "-".join(names_list) # 用什么分隔符拼接names_list列表
print(s12,type(s12)) # "rain-yuan-alvin-eric"
3.3.4、类型转换
i = int("3")
print(i,type(i)) # 3 <class 'int'>
s = str(3.14)
print(s,type(s)) # 3.14 <class 'str'>
3.4、运算符
3.4.1、算数运算符
运算符 | 说明 | 实例 | 结果 |
---|---|---|---|
+ | 加 | 1+1 | 2 |
- | 减 | 1-1 | 0 |
* | 乘 | 1*3 | 3 |
/ | 除法(和数学中的规则一样) | 4/2 | 2 |
// | 整除(只保留商的整数部分) | 7 // 2 | 3 |
% | 取余,即返回除法的余数 | 7 % 2 | 1 |
** | 幂运算/次方运算,即返回 x 的 y 次方 | 2 ** 4 | 16,即 24 |
3.4.2、赋值运算符
运算符 | 说 明 | 用法举例 | 等价形式 |
---|---|---|---|
= | 最基本的赋值运算 | 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 指的是右移的位数 |
3.4.3、比较运算符
比较运算符 | 说明 |
---|---|
> | 大于,如果> 前面的值大于后面的值,则返回 True,否则返回 False。 |
< | 小于,如果< 前面的值小于后面的值,则返回 True,否则返回 False。 |
== | 等于,如果== 两边的值相等,则返回 True,否则返回 False。 |
>= | 大于等于(等价于数学中的 ≥),如果>= 前面的值大于或者等于后面的值,则返回 True,否则返回 False。 |
<= | 小于等于(等价于数学中的 ≤),如果<= 前面的值小于或者等于后面的值,则返回 True,否则返回 False。 |
!= | 不等于(等价于数学中的 ≠),如果!= 两边的值不相等,则返回 True,否则返回 False。 |
is | 判断两个变量所引用的对象是否相同,如果相同则返回 True,否则返回 False。 |
is not | 判断两个变量所引用的对象是否不相同,如果不相同则返回 True,否则返回 False。 |
3.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 1==2) # False
print(not 3<5) # False
print(not(4<2) or 1==2) # True
值得注意的是逻辑运算符有一套很好玩的短路算法
print(2 and 1)
print(0 and 1)
print(0 or 1)
print(3 or 5)
3.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))
3.6、章节练习题
"""
1. 分析下面代码的运行结果?
x = 10
y = x
y = 20
print(x)
print(y)
2. 用print打印出下面内容:
文能提笔安天下,
武能上马定乾坤。
心存谋略何人胜,
古今英雄唯是君。
3. 利用 input函数,连续输入两个数字求和?
4. 分别使用%占位符以及f{}的方法两种方式制作趣味模板程序需求:
等待用户输名字、地址、爱好,
根据用户的名字和爱好进任意格式化输出
如:敬爱可亲的xxx,最喜欢在xxx地方去xxx
5. 有 names = " 张三 李四 王五 赵六 "
将names字符串中所有的名字放在一个列表中
6. 查找字符串" 张三 李四 王五 赵六 "王五的索引位置
7. 将"goods"与"food"以及"meat"拼接为完整路径,即"/goods/food/meat/"
8. s = "hello world"切片操作
(1) s[1:4]
(2) s[-1:-4]
(3) 打印"world"如何切片
9. "1" == 1的结果是什么?
10. 将变量x=1,自减10,并打印结果?
"""
本文来自博客园,作者:Chimengmeng,转载请注明原文链接:https://www.cnblogs.com/dream-ze/p/17337354.html