3.1 第一个Python程序
3.1.1 使用 Python 命令行
- 打开命令提示符 win + R --> cmd enter
- 输入
python
来启动 Python 解释器
>>> print("hello world")
hello world
3.1.2 使用 IPython
IPython 是一个增强的 Python shell,提供了比标准 Python shell 更多的功能,如语法高亮、自动补全等
- 安装 IPython(如果还没有安装的话)
- 在命令行或终端中输入
ipython
来启动 IPython
In [1]: print('hello world')
hello world
3.1.3 使用 PyCharm
- 打开或创建一个 Python 文件
- 在编辑器中输入代码
python 文件名
或编辑器启动
3.2 注释
注释是用来添加说明性文本,帮助其他开发者理解代码的目的和功能
3.2.1 单行注释
单行注释使用 #
符号开始,直到行尾都是注释内容
# 这是一个单行注释
print("hello world") # 这也是一个单行注释
3.2.2 多行注释
Python并没有内置的多行注释符号,但可以使用三个引号 ("""
或 '''
) 来创建一个多行字符串,作为多行注释使用。三个引号通常用于文档字符串(docstrings)
"""
这是一个多行注释,
可以跨越多行,
并且包含任何文本。
"""
print("hello world") # 这里可以继续写代码
注意:文档字符串 (docstrings)
文档字符串是一种特殊的注释形式,通常用于描述模块、函数、类或方法的用途和用法。它们是用三个引号括起来的字符串,位于定义的开头。文档字符串可以被 __doc__
属性访问。
def greet(name):
"""
打印一个友好的问候信息给 name 参数指定的人。
参数:
name (str): 被问候的人的名字。
"""
print(f"Hello, {name}!")
greet.__doc__ # 获取文档字符串
3.3 变量
变量是用来存储数据的标识符。Python是一种动态类型的语言,不需要在声明变量时指定其类型。当你给一个变量赋值时,它的类型就确定了。
3.3.1 变量的赋值
可以直接将值赋给变量
age = 25
height = 1.75
name = "buddha"
is_student = True
3.3.2 变量的命名
- 合法字符:
- 变量名只能包含字母、数字和下划线。
- 变量名不能以数字开头。
- 大小写敏感:
- Python中的变量名是区分大小写的。例如,
Variable
,variable
, 和VARIABLE
是三个不同的变量。
- 避免使用保留字:
- 不要使用Python的关键字(如
if
,for
,while
,class
,def
等)作为变量名。
- 有意义的名字:
- 使用描述性的变量名可以使代码更容易理解。例如,使用
total_sales
而不是ts
。
- 避免使用单个字母:
- 尽管使用单个字母作为变量名是合法的,但通常最好使用更具描述性的名称,除非在特定情况下单个字母足够清楚(例如循环索引变量
i
或j
)。
- 避免使用内置函数名:
- 避免使用Python内置函数名作为变量名,如
list
,str
,min
,max
等。
- 驼峰命名法与下划线命名法:
- 在Python中,推荐使用下划线分隔单词(snake_case),而不是驼峰式命名法(CamelCase)。例如,使用
this_is_a_variable
而不是thisIsAVariable
。
- 对于类名,则推荐使用驼峰式命名法。
- 全局变量和局部变量:
- 全局变量通常建议使用大写字母加下划线(ALL_CAPS_WITH_UNDERSCORES),例如
MAX_CONNECTIONS
。 - 局部变量和函数参数通常使用小写字母加下划线。
- 特殊变量名:
- Python有一些特殊变量名,如
__name__
,__doc__
,__package__
等,这些应该仅用于它们预定的目的。
- PEP 8 标准:
- Python有一个官方的风格指南 PEP 8,它提供了一系列关于变量命名以及其他编码风格的最佳实践。
示例:
# 好的变量命名示例
number_of_students = 20
average_score = 75.5
is_valid = True
# 不好的变量命名示例
a = 20
b = 75.5
c = True
3.4 关键字
关键字是指在语言本身具有特殊意义的保留字。这些关键字不能用作变量名、函数名或其他标识符的名称。Python有一套固定的关键字集,这些关键字用于定义语法结构,比如控制流语句、异常处理、类定义等。
3.4.1 Python3.x关键字
In [1]: import keyword
In [2]: keyword.kwlist
Out[2]:
['False',
'None',
'True',
'and',
'as',
'assert',
'async',
'await',
'break',
'class',
'continue',
'def',
'del',
'elif',
'else',
'except',
'finally',
'for',
'from',
'global',
'if',
'import',
'in',
'is',
'lambda',
'nonlocal',
'not',
'or',
'pass',
'raise',
'return',
'try',
'while',
'with',
'yield']
关键字在Python程序中都有特定的用途。例如:
if
: 用于条件判断。for
: 用于迭代序列。def
: 用于定义函数。class
: 用于定义类。import
: 用于导入模块或包。try
: 用于异常处理。return
: 用于从函数返回值。pass
: 用于创建一个空的代码块。raise
: 用于引发异常。
示例:
# 使用 def 定义函数
def greet(name):
if name == "buddha":
return "hello buddha"
else:
return "hello world"
3.5 基本数据类型
在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
- 整数 (int)
- 整数是没有小数部分的数字,可以是正数也可以是负数。
age = 25
- 浮点数 (float)
- 浮点数是有小数部分的数字,同样可以是正数也可以是负数。
height = 1.75
- 复数 (complex)
- 复数由实部和虚部组成,虚部以
j
或J
结尾。
z = 3 + 5j
- 布尔值 (bool)
- 布尔值表示逻辑值,只有两个可能的值:
True
和False
。
is_student = True
- 字符串 (str)
- 字符串是由零个或多个字符组成的序列,可以用单引号
'
或双引号"
来包围。
greeting = "Hello, world!"
- 列表 (list)
- 列表是有序的元素集合,可以包含不同类型的数据,并且支持修改。
numbers = [1, 2, 3, 4, 5]
- 元组 (tuple)
- 元组也是有序的元素集合,但一旦创建就不能修改。
point = (10, 20)
- 字典 (dict)
- 字典是键值对的集合,其中每个键都是唯一的。
person = {"name": "Bob", "age": 30}
- 集合 (set)
- 集合是无序的不重复元素的集合。
unique_numbers = {1, 2, 3, 4, 5}
- None
None
类型只有一个值None
,通常用来表示一个没有值的对象。
result = None
3.6 数据类型转换
在Python中,数据类型转换可以分为两种主要形式:强制类型转换(也称为显式类型转换)和自动类型转换(也称为隐式类型转换)
3.6.1 强制类型转换
通过调用特定的数据类型转换函数来完成的,如int()
, float()
, str()
, bool()
等
# 显式转换示例
x = 10 # x 是整数
y = 10.5 # y 是浮点数
s = "123" # s 是字符串
# 转换为浮点数
x_float = float(x)
print(x_float) # 输出: 10.0
# 转换为整数
y_int = int(y)
print(y_int) # 输出: 10
# 转换为整数
s_int = int(s)
print(s_int) # 输出: 123
# 转换为字符串
x_str = str(x)
print(x_str) # 输出: '10'
# 转换为布尔值
x_bool = bool(x)
print(x_bool) # 输出: True
3.6.2 自动类型转换
指Python在某些操作中自动进行的数据类型转换。这种转换主要发生在算术运算中,例如当混合了整数和浮点数的操作时。
# 隐式转换示例
a = 10 # a 是整数
b = 20.5 # b 是浮点数
# 混合类型的加法
result = a + b
print(result) # 输出: 30.5
# 在比较运算中,字符串与数字不会发生隐式转换
# 下面这行代码会引发错误
# c = "100" + 200 # TypeError: can only concatenate str (not "int") to str
布尔值可以被隐式转换为整数。
True
被视为1
,而False
被视为0
3.7 运算符
运算符是在编程语言中用来执行特定类型的操作的符号
3.7.1 算术运算符
+
加法-
减法*
乘法/
除法(结果为浮点数)//
整数除法(结果为整数,向下取整)%
取模(得到除法的余数)**
幂运算(指数)
a = 10
b = 3
print(a + b) # 输出 13
print(a - b) # 输出 7
print(a * b) # 输出 30
print(a / b) # 输出 3.3333333333333335
print(a // b) # 输出 3
print(a % b) # 输出 1
print(a ** b) # 输出 1000
3.7.2 比较运算符
==
等于!=
不等于<
小于>
大于<=
小于或等于>=
大于或等于
x = 5
y = 10
print(x == y) # 输出 False
print(x != y) # 输出 True
print(x < y) # 输出 True
print(x > y) # 输出 False
print(x <= y) # 输出 True
print(x >= y) # 输出 False
3.7.3 赋值运算符
=
赋值+=
加法赋值-=
减法赋值*=
乘法赋值/=
除法赋值//=
整数除法赋值%=
取模赋值**=
幂运算赋值&=
按位与赋值|=
按位或赋值^=
按位异或赋值<<=
左移位赋值>>=
右移位赋值
# = 简单赋值
x = 10
print(x) # 输出: 10
# 加法赋值 +=
x = 5
x += 3 # 等同于 x = x + 3
print(x) # 输出: 8
# 减法赋值 -=
x = 10
x -= 4 # 等同于 x = x - 4
print(x) # 输出: 6
# 乘法赋值 *=
x = 2
x *= 5 # 等同于 x = x * 5
print(x) # 输出: 10
# 除法赋值 /=
x = 15
x /= 3 # 等同于 x = x / 3
print(x) # 输出: 5.0
# 整数除法赋值 //=
x = 15
x //= 3 # 等同于 x = x // 3
print(x) # 输出: 5
# 取模赋值 %=
x = 10
x %= 3 # 等同于 x = x % 3
print(x) # 输出: 1
# 幂运算赋值 **=
x = 2
x **= 3 # 等同于 x = x ** 3
print(x) # 输出: 8
# 按位与赋值 &=
x = 5 # 二进制: 0101
x &= 3 # 二进制: 0011 (等同于 x = x & 3)
print(x) # 输出: 1 (二进制: 0001)
# 按位或赋值 |=
x = 5 # 二进制: 0101
x |= 3 # 二进制: 0011 (等同于 x = x | 3)
print(x) # 输出: 7 (二进制: 0111)
# 按位异或赋值 ^=
x = 5 # 二进制: 0101
x ^= 3 # 二进制: 0011 (等同于 x = x ^ 3)
print(x) # 输出: 6 (二进制: 0110)
# 左移位赋值 <<=
x = 5 # 二进制: 0101
x <<= 1 # 等同于 x = x << 1
print(x) # 输出: 10 (二进制: 1010)
# 右移位赋值 >>=
x = 10 # 二进制: 1010
x >>= 1 # 等同于 x = x >> 1
print(x) # 输出: 5 (二进制: 0101)
3.7.4 逻辑运算符
and
逻辑与or
逻辑或not
逻辑非
bool1 = True
bool2 = False
print(bool1 and bool2) # 输出 False
print(bool1 or bool2) # 输出 True
print(not bool1) # 输出 False
3.7.5 成员运算符
in
判断元素是否在序列中not in
判断元素是否不在序列中
list1 = [1, 2, 3, 4, 5]
print(3 in list1) # 输出 True
print(6 not in list1) # 输出 True
3.7.6 身份运算符
is
判断两个变量是否指向同一个对象is not
判断两个变量是否不指向同一个对象
list1 = [1, 2, 3, 4, 5]
list2 = list1
print(list1 is list2) # 输出 True
print(list1 is not list2) # 输出 False
3.7.7 位运算符
~
按位取反&
按位与|
按位或^
按位异或<<
左移>>
右移
num1 = 5 # 二进制: 0101
num2 = 3 # 二进制: 0011
print(num1 & num2) # 输出 1 (0001)
print(num1 | num2) # 输出 7 (0111)
print(num1 ^ num2) # 输出 6 (0110)
print(~num1) # 输出 -6
print(num1 << 1) # 输出 10 (1010)
print(num1 >> 1) # 输出 2 (0010)
3.8 type() 和 input()函数
3.8.1 type() 函数
type()
函数用于返回对象的数据类型。
a = 5
b = "Hello"
c = [1, 2, 3]
print(type(a)) # 输出: <class 'int'>
print(type(b)) # 输出: <class 'str'>
print(type(c)) # 输出: <class 'list'>
3.8.2 input() 函数
input()
函数用于从用户那里获取输入。它总是返回一个字符串。如果需要其他类型的值,需要强制类型转换
name = input("请输入你的名字: ")
print("你好,", name)
# 获取整数输入
age = int(input("请输入你的年龄: "))
print("你的年龄是:", age)
# 获取浮点数输入
height = float(input("请输入你的身高(米): "))
print("你的身高是:", height, "米")
3.9 字符串运算
3.9.1 拼接字符串
使用 +
运算符来拼接两个字符串
s1 = "Hello"
s2 = "World"
result = s1 + s2
print(result) # 输出: HelloWorld
3.9.2 重复字符串
使用 *
运算符来重复字符串
repeat = "*" * 3
print(repeat) # 输出: ***
3.10 格式化输出
在 Python 中,格式化输出是指将变量的值插入到字符串中,生成易于阅读的输出。
3.10.1 使用 %
运算符
这是 Python 2 中常用的字符串格式化方法,但在 Python 3 中仍然可用。
name = "曹操"
age = 38
# 使用 %s 表示字符串,%d 表示整数
output = "My name is %s and I am %d years old." % (name, age)
print(output) # 输出: My name is 曹操 and I am 38 years old.
3.10.2 使用 str.format()
str.format()
方法是 Python 2.6 及以上版本引入的一种更灵活的字符串格式化方法。
name = "曹操"
age = 38
# 使用 {} 占位符,并通过 format 方法传入参数,默认按顺序匹配
output = "My name is {} and I am {} years old.".format(name, age)
print(output) # 输出: My name is 曹操 and I am 38 years old.
# 指定占位符的位置,使用索引匹配
output = "My name is {0} and I am {1} years old.".format(name, age)
print(output) # 输出: My name is 曹操 and I am 38 years old.
# 使用关键字参数,使用关键字匹配
output = "My name is {name} and I am {age} years old.".format(name=name, age=age)
print(output) # 输出: My name is 曹操 and I am 38 years old.
3.10.3 使用 f-string (f-strings)
从 Python 3.6 开始,引入了 f-string,这是一种更为简洁和直观的格式化字符串的方法。
name = "曹操"
age = 38
# 使用 f-string
output = f"My name is {name} and I am {age} years old."
print(output) # 输出: My name is 曹操 and I am 38 years old.
# 更复杂的表达式
output = f"My name is {name} and I am {age * 2} years old next year."
print(output) # 输出: My name is 曹操 and I am 76 years old next year.
3.10.4 使用 str()
和字符串拼接
虽然不是真正的格式化,但可以使用 str()
函数将其他类型的值转换为字符串,然后使用 +
进行拼接。
name = "曹操"
age = 38
output = "My name is " + name + " and I am " + str(age) + " years old."
print(output) # 输出: My name is 曹操 and I am 38 years old.
3.10.5 格式符号
用于指定变量类型和格式化样式的占位符。格式符号主要用于 %
运算符和 str.format()
方法中。
使用
%
运算符
%s
- 字符串 (string)%d
- 整数 (decimal integer)%f
- 浮点数 (floating point)%.nf
- 浮点数,其中n
是小数点后的位数%e
或%E
- 科学记数法 (exponential notation)%g
或%G
- 自动选择%f
或%e
中较短的一个%c
- 字符 (character)%r
- 原始数据 (raw data) 或 repr() 的输出
age = 38
height = 1.757
name = "曹操"
# 使用 % 运算符
print("Name: %s, Age: %d, Height: %.2f" % (name, age, height))
# 使用 str.format()
print("Name: {}, Age: {}, Height: {:.2f}".format(name, age, height))
# 使用 f-string
print(f"Name: {name}, Age: {age}, Height: {height:.2f}")