Python编程基础(老男孩)——第二章 Python基础

第二章 Python基础

2.1 hello world

python有两种方式输出”hello world“


2.1.1 文本式编程

在.py文件中写好代码,把文件丢给python解释器运行,如果是ide,则ide调用python解释器运行文件。


2.1.2 命令行交互式编程

可以在命令行中使用 python 命令调用 Python 解释器,然后在解释器中输入 Python 代码来输出 "Hello World"。

以下是在命令行中输出 "Hello World" 的步骤:

  1. 打开命令行终端(Windows 上可以使用 cmd 或 PowerShell,Mac 或 Linux 上可以使用终端)。

  1. 在命令行中输入 python 命令,然后按下 Enter 键。这将启动 Python 解释器,并显示一个提示符 >>>

  1. 在提示符后输入以下代码,并按下 Enter 键:

print("Hello World")
  1. Python 解释器将执行该代码,并将 "Hello World" 输出到屏幕上。

完整的命令行会像这样:

$ python
Python 3.9.0 (default, Oct  6 2020, 00:00:00)
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> print("Hello World")
Hello World
>>>

在这个例子中,我们在 Linux 上使用 Python 3.9.0 版本来输出 "Hello World"。


2.2 PEP8代码风格指南

PEP8 是 Python 官方的代码风格指南,全称是 "Python Enhancement Proposal 8"。它详细说明了 Python 代码的书写规范和约定,包括代码布局、标识符命名、注释和文档字符串、代码结构等方面。遵循 PEP8 指南可以提高代码的可读性和可维护性,同时也方便了代码的共享和协作。


2.2.1 注释

在 Python 中,注释是用来对代码进行说明和解释的语句,它不会被解释器执行。Python 中有两种注释方式:

  1. 单行注释:以 # 开头,直到行末的所有内容都会被解释器忽略。

# 这是单行注释
print("Hello World")  # 这是带注释的代码行
  1. 多行注释:使用三个单引号 ''' 或三个双引号 """ 包围多行注释内容。

'''
这是
多行注释
'''
print("Hello World")
"""
这也是
多行注释
"""
print("Hello World")

Python 中的注释可以用来记录代码的目的、用途、特点、作者等信息,也可以用来暂时屏蔽掉一些代码。良好的注释能够提高代码的可读性和可维护性,建议在编写代码时添加适当的注释。


2.2.2 缩进

在 Python 中,缩进是非常重要的语法元素,它决定了代码块的开始和结束。Python 使用缩进而不是花括号来表示代码块的范围,因此缩进必须正确使用,否则代码将无法正常执行。

Python 代码块使用四个空格缩进,不要使用制表符或其它空格数。下面是一些示例代码:

if True:
    print("True")
else:
    print("False")
def say_hello(name):
    print(f"Hello, {name}!")

say_hello("Tom")

在上面的示例代码中,if 语句和函数定义的代码块都使用了四个空格的缩进,缩进可以嵌套,用于表示嵌套的代码块。

如果缩进不正确,会导致语法错误或代码运行不符合预期。因此,编写 Python 代码时,要仔细检查缩进是否正确,并保持缩进的一致性,这样可以提高代码的可读性和可维护性。


2.2.3 单引号与双引号

在 Python 中,单引号和双引号都可以用来表示字符串,它们的使用方法是相同的,但是有一些细微的区别。

  1. 在字符串中使用引号

如果字符串中使用了单引号,那么可以使用双引号来表示字符串,反之亦然。例如:

print("I'm Tom.")  # 使用双引号表示字符串
print('He said, "Hello!"')  # 使用单引号表示字符串
  1. 在字符串中使用相同的引号

如果字符串中使用了双引号,那么可以在字符串中使用单引号,反之亦然。例如:

print("He said, 'Hello!'")  # 在双引号字符串中使用单引号
print('I said, "Hi!"')  # 在单引号字符串中使用双引号
  1. 转义字符

如果字符串中需要表示引号本身,可以使用反斜杠(\)来转义。例如:

print("She said, \"I'm happy!\"")  # 转义双引号
print('He said, \'It\'s raining.\'')  # 转义单引号

一般来说,单引号和双引号可以互相替换使用,只要保证字符串的开头和结尾使用相同的引号。建议在字符串中使用双引号,因为单引号在 SQL 查询等语句中经常被用作字符串的引号,使用双引号可以避免混淆。


2.2.4 逻辑行与物理行

在 Python 中,逻辑行和物理行是两个概念。

逻辑行指的是代码中的一行语句,可以通过分号(;)将多个语句放在同一行,也可以通过反斜杠(\)将一行语句分成多行。例如:

# 分号将两个语句放在同一行
x = 1; y = 2

# 反斜杠将一行语句分成多行
z = x + \
    y

物理行指的是代码文件中的一行代码,可以是任意长度。在 Python 中,物理行的结尾通常使用换行符来表示,但是在某些情况下,可以省略换行符将多个物理行合并成一个逻辑行。例如:

# 括号内的多个物理行被合并成一个逻辑行
x = (1 +
     2 +
     3)

需要注意的是,Python 中的缩进和语句的结尾通常用来划分逻辑行,而不是物理行。例如:

if x == 1:
    y = 2

在上面的示例代码中,if 语句的逻辑行只有一行,但是它由两个物理行组成,第二行缩进了四个空格。这样的代码风格可以提高代码的可读性和可维护性。


2.3 变量与内存管理

Python 中的变量是一个内存地址的标识符,它指向一个存储在内存中的对象。在 Python 中,变量和对象是两个不同的概念,变量只是一个指针,它指向的对象可以是任何类型的数据。


2.3.1 变量赋值

在 Python 中,变量赋值是通过使用等号(=)运算符实现的。变量赋值的一般形式是:

variable = expression

其中,variable 表示要赋值的变量名,expression 表示要赋给该变量的值。

在 Python 中,变量赋值实际上是将一个对象的引用赋给变量,而不是将值赋给变量。因此,在变量之间进行赋值时,实际上是将一个对象的引用复制到另一个变量中,而不是将对象本身复制到另一个变量中。

例如:

a = 123
b = a  # 将 a 的引用复制给 b
a = 456
print(b)  # 输出 123

在上面的例子中,首先将一个整数对象 123 赋给变量 a,然后将 a 的引用复制给 b,最后将 a 的引用指向另一个整数对象 456。由于 b 仍然指向原来的整数对象 123,因此输出 b 的值为 123。

需要注意的是,在 Python 中,变量名不需要事先声明类型,变量类型是根据变量所引用的对象类型来确定的。例如:

x = 1     # 整数类型
y = 2.0   # 浮点数类型
z = 'abc' # 字符串类型

Python 支持链式赋值,即一行代码中可以同时给多个变量赋值。例如:

a = b = c = 1    

在上面的例子中,三个变量 a、b 和 c 同时被赋值为整数 1。

链式赋值的原理是,将一个对象的引用同时赋给多个变量。因此,在链式赋值中,所有变量都引用同一个对象。例如:

a[0] = 4
print(b)  # 输出 [4, 2, 3]

在上面的例子中,将列表 a 的第一个元素修改为 4,然后输出变量 b 的值,发现 b 的值也被修改了。这是因为变量 a 和 b 都引用同一个列表对象。


Python 有一些命名规则和约定,以便更好地管理变量名。以下是一些常用的变量命名规则:

  • 变量名只能包含字母、数字和下划线,不能以数字开头。

  • 变量名应该具有描述性,以便在阅读代码时能够快速理解其含义。

  • 变量名应该遵循小写字母和下划线的组合,例如,my_variable。

  • 变量名的长度应该适中,不应该太长或太短。

  • 避免使用 Python 关键字作为变量名,例如,if、while、for 等。

  • 对于常量,变量名应该全部大写,例如,MAX_VALUE。

以下是一些命名约定的示例:

# 合法的变量名
age = 18
name = "Alice"
max_value = 100

# 不合法的变量名
123abc = 456  # 变量名不能以数字开头
a b c = 123   # 变量名不能包含空格
if = 123      # 变量名不能使用 Python 关键字

需要注意的是,Python 是区分大小写的,因此变量名中的大小写字母是有意义的。例如,变量 name 和变量 Name 是不同的变量名。


除了上面提到的命名规则和约定之外,还应该避免以下三种情况:

  1. 避免使用单个字符作为变量名,除非它们是用于特定用途的常见缩写,例如 i 和 j 用于循环计数器,x、y、z 用于坐标轴。如果变量名过于简短和抽象,很难在代码中快速理解其含义。

  1. 避免在包/模块名中使用连接符 " - ",而应该使用小写字母和下划线的组合,例如 my_module,而不是 my-module。因为 Python 常用的命名约定是使用下划线作为单词之间的分隔符,连接符常常用于其他语言的命名约定中。

  1. 避免使用以双下划线开头和结尾的名称,例如 __init__,因为这些名称在 Python 中有特殊的含义,被称为“魔术方法”或“特殊方法”,用于定义类的行为和属性。如果在自己的代码中使用这些名称,可能会与 Python 中的特殊方法冲突,并导致意外的行为。

总之,在选择变量名和命名模块时,应该选择具有描述性的、清晰的变量名和命名模式,以便代码易于理解和维护。


2.3.2 内存管理

Python 中的内存管理主要涉及两个方面:对象的创建和删除,以及内存分配和释放。

  1. 对象的创建和删除

Python 中的对象是动态创建的,也就是说,当代码中出现一个新对象时,Python 解释器会在内存中为其分配空间。Python 会自动进行垃圾回收,即当一个对象不再被引用时,Python 解释器会自动将其内存释放,以供其他对象使用。

  1. 内存分配和释放

Python 中的内存分配和释放是由解释器自动管理的。Python 采用了一种名为“引用计数”的技术来跟踪对象的引用情况,即每个对象都有一个计数器,用于记录当前有多少个引用指向该对象。当对象被引用时,计数器加一,当引用被删除时,计数器减一。当计数器为零时,Python 解释器会自动将对象从内存中删除。

除了引用计数之外,Python 还采用了其他技术来优化内存管理,例如内存池机制和垃圾回收机制。内存池机制通过重复使用一些小的内存块来减少内存分配和释放的开销,提高内存使用效率。垃圾回收机制则通过检测不再被引用的对象,并在适当的时候将其删除,以避免内存泄漏和程序崩溃。

总之,Python 的内存管理是由解释器自动管理的,开发者无需手动分配和释放内存。但是,开发者需要注意避免创建大量不必要的对象和循环引用等情况,以避免内存占用过高和程序性能下降的问题。


2.4 print and input

在 Python 中,print() 函数和 input() 函数是用于输出和输入数据的两个基本函数。

  1. print() 函数

print() 函数可以将给定的内容输出到控制台上。可以将多个参数传递给 print() 函数,它们将被自动转换为字符串,并以空格分隔输出。例如:

print("Hello", "World")

上述代码会输出:Hello World

print() 函数还可以使用格式化字符串,例如:

name = "Alice"
age = 25
print("My name is %s, and I am %d years old." % (name, age))    

上述代码中,%s 表示字符串类型的占位符,%d 表示整数类型的占位符。当 print() 函数执行时,占位符将被实际的变量值所替代,输出结果为:My name is Alice, and I am 25 years old.


  1. input() 函数

input() 函数用于从控制台读取用户的输入。当调用 input() 函数时,程序将暂停执行,等待用户在控制台上输入一些文本,并按回车键确认。例如:

name = input("Please enter your name: ")
print("Hello, " + name + "!")

上述代码中,程序将提示用户输入姓名,并将输入值存储在 name 变量中。然后,程序将使用字符串拼接方式将欢迎信息输出到控制台上。如果用户输入的是 Alice,则输出结果为:Hello, Alice!


2.5 运算符与表达式

在 Python 中,运算符用于执行各种算术、比较、逻辑和位运算。表达式是由运算符、操作数和函数调用组成的序列,用于计算值。


2.5.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)  # 输出 1

2.5.2比较运算符

比较运算符用于比较两个值的大小或相等性。例如:

a = 10
b = 3
print(a > b)   # 输出 True
print(a < b)   # 输出 False
print(a == b)  # 输出 False
print(a != b)  # 输出 True

2.5.3 逻辑运算符

逻辑运算符用于对布尔值进行逻辑运算,包括与、或、非等。例如:

a = True
b = False
print(a and b)   # 输出 False
print(a or b)    # 输出 True
print(not a)     # 输出 False

2.5.4 位运算符

位运算符用于对整数进行位运算,包括按位与、按位或、按位异或、左移和右移等。例如:

a = 10    # 二进制为 1010
b = 3     # 二进制为 0011
print(a & b)    # 输出 2 (二进制为 0010)
print(a | b)    # 输出 11 (二进制为 1011)
print(a ^ b)    # 输出 9 (二进制为 1001)
print(a << 1)   # 输出 20 (二进制为 10100)
print(a >> 1)   # 输出 5 (二进制为 0101)

2.5.5 赋值运算符

赋值运算符用于将右侧的值赋给左侧的变量。Python 中常见的赋值运算符包括:

  • =:简单的赋值运算符,将右侧的值赋给左侧的变量。

  • +=:加法赋值运算符,相当于 a = a + b

  • -=:减法赋值运算符,相当于 a = a - b

  • *=:乘法赋值运算符,相当于 a = a * b

  • /=:除法赋值运算符,相当于 a = a / b

  • %=:取模赋值运算符,相当于 a = a % b

  • //=:整除赋值运算符,相当于 a = a // b

  • **=:幂赋值运算符,相当于 a = a ** b

  • &=:按位与赋值运算符,相当于 a = a & b

  • |=:按位或赋值运算符,相当于 a = a | b

  • ^=:按位异或赋值运算符,相当于 a = a ^ b

  • <<=:左移赋值运算符,相当于 a = a << b

  • >>=:右移赋值运算符,相当于 a = a >> b

例如:

a = 10
b = 3
a += b  # 等价于 a = a + b
print(a)  # 输出 13

2.5.6 成员运算符

成员运算符用于判断一个值是否属于某个序列,包括字符串、列表、元组、集合和字典等。Python 中常见的成员运算符包括:

  • in:如果指定的值在序列中,返回 True,否则返回 False。

  • not in:如果指定的值不在序列中,返回 True,否则返回 False。

例如:

a = [1, 2, 3, 4, 5]
print(3 in a)  # 输出 True
print(6 in a)  # 输出 False

2.5.7 身份运算符

身份运算符用于比较两个对象的内存地址是否相同,包括 isis not 两个运算符。例如:

a = [1, 2, 3]
b = [1, 2, 3]
print(a is b)     # 输出 False
print(a is not b) # 输出 True

2.5.8 运算符的优先级

下表列出了Python中各种运算符的优先级,优先级从高到低排列(相同优先级按从左到右):

运算符

描述

lambda

Lambda表达式

if - else

条件表达式

or

布尔或

and

布尔与

not x

布尔非

in, not in, is, is not, <, <=, >, >=, !=, ==

比较运算符

|

按位或

^

按位异或

&

按位与

<<, >>

移位运算符

+, -

加法和减法

*, @, /, //, %

乘法、矩阵乘法、除法、整除和取余

+x, -x, ~x

正号、负号和按位取反

**

幂运算

await x

await 表达式

x[index], x[index:index], x(arguments...), x.attribute

下标、切片、调用和属性访问

(expressions...), [expressions...], {key: value...}, {expressions...}

明确的绑定或元组、列表、字典、集合显示

x.y

属性参考

x[i]

下标

x[i:j]

分片

f(arguments...)

函数调用

(expressions...)

绑定或元组显示

[expressions...]

列表显示

{key: value...}

字典显示

{expressions...}

集合显示


2.6 流程控制语句

Python中的流程控制语句包括条件语句(if语句)、循环语句(for语句、while语句)、控制流程语句(break语句、continue语句、pass语句)和异常处理语句(try语句、except语句、finally语句、raise语句)。

Python编程基础(老男孩)——第二章 Python基础_第1张图片

2.6.1 条件语句

条件语句主要包括 ifelifelse,语法如下:

if condition1:
    statement1
elif condition2:
    statement2
else:
    statement3

其中,condition1 为判断条件,若为 True 则执行 statement1,否则判断 condition2,若为 True 则执行 statement2,否则执行 statement3


2.6.2 循环语句

循环语句包括 whilefor 两种形式。


  • while循环
while condition:
    statement

其中,condition 为循环条件,若为 True 则重复执行 statement,直到 conditionFalse 才停止循环。


  • for循环

for 循环的语法如下:

for variable in sequence:
    statement

其中,sequence 为一个可迭代对象(如列表、元组、字符串等),variable 为循环变量,每次循环从 sequence 中取出一个值赋给 variable,然后执行 statement

除了普通的 for 循环,Python 还提供了 range 函数用于生成指定范围的数值序列,语法如下:

range(start, stop[, step])

其中,start 为起始值,stop 为结束值(不包含),step 为步长(默认为 1)。例如,range(1, 5) 生成的序列为 1, 2, 3, 4。

另外,Python 还提供了 breakcontinue 关键字,用于控制循环的执行流程。

  • break 用于结束循环,即使循环条件仍然为 True

  • continue 用于跳过当前循环迭代,进入下一次循环迭代。

  • pass是一个空语句,用于占位。它通常被用作占位符,用于表示未实现的代码块。


你可能感兴趣的:(Python,python,开发语言)