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 变量的命名
  1. 合法字符
  • 变量名只能包含字母、数字和下划线。
  • 变量名不能以数字开头。
  1. 大小写敏感
  • Python中的变量名是区分大小写的。例如,Variable, variable, 和 VARIABLE 是三个不同的变量。
  1. 避免使用保留字
  • 不要使用Python的关键字(如 if, for, while, class, def 等)作为变量名。
  1. 有意义的名字
  • 使用描述性的变量名可以使代码更容易理解。例如,使用 total_sales 而不是 ts
  1. 避免使用单个字母
  • 尽管使用单个字母作为变量名是合法的,但通常最好使用更具描述性的名称,除非在特定情况下单个字母足够清楚(例如循环索引变量 ij)。
  1. 避免使用内置函数名
  • 避免使用Python内置函数名作为变量名,如 list, str, min, max 等。
  1. 驼峰命名法与下划线命名法
  • 在Python中,推荐使用下划线分隔单词(snake_case),而不是驼峰式命名法(CamelCase)。例如,使用 this_is_a_variable 而不是 thisIsAVariable
  • 对于类名,则推荐使用驼峰式命名法。
  1. 全局变量和局部变量
  • 全局变量通常建议使用大写字母加下划线(ALL_CAPS_WITH_UNDERSCORES),例如 MAX_CONNECTIONS
  • 局部变量和函数参数通常使用小写字母加下划线。
  1. 特殊变量名
  • Python有一些特殊变量名,如 __name__, __doc__, __package__ 等,这些应该仅用于它们预定的目的。
  1. 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 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

  1. 整数 (int)
  • 整数是没有小数部分的数字,可以是正数也可以是负数。
age = 25
  1. 浮点数 (float)
  • 浮点数是有小数部分的数字,同样可以是正数也可以是负数。
height = 1.75
  1. 复数 (complex)
  • 复数由实部和虚部组成,虚部以 jJ 结尾。
z = 3 + 5j
  1. 布尔值 (bool)
  • 布尔值表示逻辑值,只有两个可能的值:TrueFalse
is_student = True
  1. 字符串 (str)
  • 字符串是由零个或多个字符组成的序列,可以用单引号 ' 或双引号 " 来包围。
greeting = "Hello, world!"
  1. 列表 (list)
  • 列表是有序的元素集合,可以包含不同类型的数据,并且支持修改。
numbers = [1, 2, 3, 4, 5]
  1. 元组 (tuple)
  • 元组也是有序的元素集合,但一旦创建就不能修改。
point = (10, 20)
  1. 字典 (dict)
  • 字典是键值对的集合,其中每个键都是唯一的。
person = {"name": "Bob", "age": 30}
  1. 集合 (set)
  • 集合是无序的不重复元素的集合。
unique_numbers = {1, 2, 3, 4, 5}
  1. 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}")