菜鸟教程 -- 学的不仅是技术,更是梦想!

Python 3 教程
Python3 教程 Python3 简介 Python3 环境搭建 Python3 VScode Python3 基础语法 Python3 基本数据类型 Python3 数据类型转换 Python3 解释器 Python3 注释 Python3 运算符 Python3 数字(Number) Python3 字符串 Python3 列表 Python3 元组 Python3 字典 Python3 集合 Python3 条件控制 Python3 循环语句 Python3 编程第一步 Python3 推导式 Python3 迭代器与生成器 Python3 with Python3 函数 Python3 lambda Python3 装饰器 Python3 数据结构 Python3 模块 Python __name__ Python3 输入和输出 Python3 File Python3 OS Python3 错误和异常 Python3 面向对象 Python3 命名空间/作用域 Python 虚拟环境的创建 Python 类型注解 Python3 标准库概览 Python3 实例 Python 测验

Python3 高级教程

Python3 正则表达式 Python3 CGI编程 Python3 MySQL(mysql-connector) Python3 MySQL(PyMySQL) Python3 网络编程 Python3 SMTP发送邮件 Python3 多线程 Python3 XML 解析 Python3 JSON Python3 日期和时间 Python3 内置函数 Python3 MongoDB Python3 urllib Python uWSGI 安装配置 Python3 pip Python3 operator Python math Python requests Python random Python OpenAI Python 有用的资源 Python AI 绘画 Python statistics Python hashlib Python 量化 Python pyecharts Python selenium 库 Python 爬虫 Python Scrapy 库 Python Markdown Python sys 模块 Python Pickle 模块 Python subprocess 模块 Python queue 模块 Python StringIO 模块 Python logging 模块 Python datetime 模块 Python re 模块 Python csv 模块 Python threading 模块 Python asyncio 模块 Python PyQt Python for 循环 Python while 循环
(追記) (追記ここまで)

Python3 基础语法

编码

默认情况下,Python3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。

当然你也可以为源码文件指定不同的编码:

# -*- coding: cp-1252 -*-

上述定义允许在源文件中使用 Windows-1252 字符集中的字符编码,对应适合语言为保加利亚语、白俄罗斯语、马其顿语、俄语、塞尔维亚语。


标识符

  • 第一个字符必须以字母(a-z, A-Z)或下划线 _
  • 标识符的其他的部分由字母、数字和下划线组成。
  • 标识符对大小写敏感,count 和 Count 是不同的标识符。
  • 标识符对长度无硬性限制,但建议保持简洁(一般不超过 20 个字符)。
  • 禁止使用保留关键字,如 if、for、class 等不能作为标识符。

合法标识符:

age = 25 # 普通变量名,最常见
user_name = "Alice" # 用下划线连接单词,清晰易读
_total = 100 # 下划线开头通常表示“内部使用”或“私有”
MAX_SIZE = 1024 # 全大写通常表示“常量”(固定不变的值)
calculate_area() # 函数名,动词+名词
StudentInfo # 类名,首字母大写(驼峰命名法)
__private_var # 双下划线开头,有特殊含义

非法标识符:

2nd_place = "silver" # 错误:以数字开头
user-name = "Bob" # 错误:包含连字符
class = "Math" # 错误:使用关键字
$price = 9.99 # 错误:包含特殊字符
for = "loop" # 错误:使用关键字

Python 3 允许使用 Unicode 字符作为标识符,可以用中文作为变量名,非 ASCII 标识符也是允许的了。

姓名 = "张三" # 合法
π = 3.14159 # 合法

测试标识符是否合法:

实例

def is_valid_identifier(name):
try:
exec(f"{name} = None")
return True
except:
return False

print(is_valid_identifier("2var")) # False
print(is_valid_identifier("var2")) # True

Python 保留关键字

保留字即关键字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:

>>> import keyword
>>> keyword.kwlist
['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']
>>> 
类别关键字说明
逻辑值True布尔真值
False布尔假值
None表示空值或无值
逻辑运算and逻辑与运算
or逻辑或运算
not逻辑非运算
条件控制if条件判断语句
elif否则如果(else if 的缩写)
else否则分支
循环控制for迭代循环
while条件循环
break跳出循环
continue跳过当前循环的剩余部分,进入下一次迭代
异常处理try尝试执行代码块
except捕获异常
finally无论是否发生异常都会执行的代码块
raise抛出异常
函数定义def定义函数
return从函数返回值
lambda创建匿名函数
类与对象class定义类
del删除对象引用
模块导入import导入模块
from从模块导入特定部分
as为导入的模块或对象创建别名
作用域global声明全局变量
nonlocal声明非局部变量(用于嵌套函数)
异步编程async声明异步函数
await等待异步操作完成
其他assert断言,用于测试条件是否为真
in检查成员关系
is检查对象身份(是否是同一个对象)
pass空语句,用于占位
with上下文管理器,用于资源管理
yield从生成器函数返回值

更多 Python 保留关键字参考:https://www.runoob.com/python3/python3-keyword.html


注释

Python中单行注释以 # 开头,实例如下:

实例(Python 3.0+)

#!/usr/bin/python3# 第一个注释print("Hello, Python!")# 第二个注释

执行以上代码,输出结果为:

Hello, Python!

多行注释可以用多个 # 号,还有 '''""":

实例(Python 3.0+)

#!/usr/bin/python3# 第一个注释# 第二个注释''' 第三注释 第四注释 '''""" 第五注释 第六注释 """print("Hello, Python!")

执行以上代码,输出结果为:

Hello, Python!

行与缩进

python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {}

缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:

实例(Python 3.0+)

ifTrue: print("True")else: print("False")

以下代码最后一行语句缩进数的空格数不一致,会导致运行错误:

实例

if True:
print ("Answer")
print ("True")
else:
print ("Answer")
print ("False") # 缩进不一致,会导致运行错误

以上程序由于缩进不一致,执行后会出现类似以下错误:

 File "test.py", line 6
 print ("False") # 缩进不一致,会导致运行错误
 ^
IndentationError: unindent does not match any outer indentation level

多行语句

Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 \ 来实现多行语句,例如:

total = item_one + \
 item_two + \
 item_three

实例

item_one = 1
item_two = 2
item_three = 3
total = item_one + \
item_two + \
item_three
print(total) # 输出为 6

在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \,例如:

total = ['item_one', 'item_two', 'item_three',
 'item_four', 'item_five']

数字(Number)类型

python中数字有四种类型:整数、布尔型、浮点数和复数。

  • int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
  • bool (布尔), 如 True。
  • float (浮点数), 如 1.23、3E-2
  • complex (复数) - 复数由实部和虚部组成,形式为 a + bj,其中 a 是实部,b 是虚部,j 表示虚数单位。如 1 + 2j、 1.1 + 2.2j

字符串(String)

  • Python 中单引号 ' 和双引号 " 使用完全相同。
  • 使用三引号('''""")可以指定一个多行字符串。
  • 转义符 \
  • 反斜杠可以用来转义,使用 r 可以让反斜杠不发生转义。 如 r"this is a line with \n"\n 会显示,并不是换行。
  • 按字面意义级联字符串,如 "this " "is " "string" 会被自动转换为 this is string
  • 字符串可以用 + 运算符连接在一起,用 * 运算符重复。
  • Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
  • Python 中的字符串不能改变。
  • Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
  • 字符串切片 str[start:end],其中 start(包含)是切片开始的索引,end(不包含)是切片结束的索引。
  • 字符串的切片可以加上步长参数 step,语法格式如下:str[start:end:step]
word = '字符串'
sentence = "这是一个句子。"
paragraph = """这是一个段落,
可以由多行组成"""

实例(Python 3.0+)

#!/usr/bin/python3str='123456789'print(str)# 输出字符串print(str[0:-1])# 输出第一个到倒数第二个的所有字符print(str[0])# 输出字符串第一个字符print(str[2:5])# 输出从第三个开始到第六个的字符(不包含)print(str[2:])# 输出从第三个开始后的所有字符print(str[1:5:2])# 输出从第二个开始到第五个且每隔一个的字符(步长为2)print(str * 2)# 输出字符串两次print(str + '你好')# 连接字符串print('------------------------------')print('hello\nrunoob')# 使用反斜杠(\)+n转义特殊字符print(r'hello\nrunoob')# 在字符串前面添加一个 r,表示原始字符串,不会发生转义

这里的 r 指 raw,即 raw string,会自动将反斜杠转义,例如:

>>> print('\n') # 输出空行
>>> print(r'\n') # 输出 \n
\n
>>>

以上实例输出结果:

123456789
12345678
1
345
3456789
24
123456789123456789
123456789你好
------------------------------
hello
runoob
hello\nrunoob

空行

函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。

空行与代码缩进不同,空行并不是 Python 语法的一部分。书写时不插入空行,Python 解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。

记住:空行也是程序代码的一部分。


等待用户输入

执行下面的程序在按回车键后就会等待用户输入:

实例(Python 3.0+)

#!/usr/bin/python3input("\n\n按下 enter 键后退出。")

以上代码中 ,\n\n 在结果输出前会输出两个新的空行。一旦用户按下 enter 键时,程序将退出。


同一行显示多条语句

Python 可以在同一行中使用多条语句,语句之间使用分号 ; 分割,以下是一个简单的实例:

实例(Python 3.0+)

#!/usr/bin/python3importsys; x = 'runoob'; sys.stdout.write(x + '\n')

使用脚本执行以上代码,输出结果为:

runoob

使用交互式命令行执行,输出结果为:

>>> import sys; x = 'runoob'; sys.stdout.write(x + '\n')
runoob
7

此处的 7 表示字符数,runoob 有 6 个字符,\n 表示一个字符,加起来 7 个字符。

>>> import sys
>>> sys.stdout.write(" hi ") # hi 前后各有 1 个空格
 hi 4

多个语句构成代码组

缩进相同的一组语句构成一个代码块,我们称之代码组。

像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。

我们将首行及后面的代码组称为一个子句(clause)。

如下实例:

if expression : 
 suite
elif expression : 
 suite 
else : 
 suite

print 输出

print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="":

实例(Python 3.0+)

#!/usr/bin/python3x="a"y="b"# 换行输出print(x)print(y)print('---------')# 不换行输出print(x, end="")print(y, end="")print()

以上实例执行结果为:

a
b
---------
a b

更多内容参考:Python2 与 Python3 print 不换行


import 与 from...import

在 python 用 import 或者 from...import 来导入相应的模块。

将整个模块(somemodule)导入,格式为: import somemodule

从某个模块中导入某个函数,格式为: from somemodule import somefunction

从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc

将某个模块中的全部函数导入,格式为: from somemodule import *

导入 sys 模块

importsysprint('================Python import mode==========================')print('命令行参数为:')foriinsys.argv: print(i)print('\n python 路径为',sys.path)

导入 sys 模块的 argv,path 成员

fromsysimportargv,path# 导入特定的成员print('================python from import===================================')print('path:',path)# 因为已经导入path成员,所以此处引用时不需要加sys.path

更多内容可以参考:Python import 和 from ... import 的主要区别


命令行参数

很多程序可以执行一些操作来查看一些基本信息,Python可以使用-h参数查看各参数帮助信息:

$ python -h
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-c cmd : program passed in as string (terminates option list)
-d : debug output from parser (also PYTHONDEBUG=x)
-E : ignore environment variables (such as PYTHONPATH)
-h : print this help message and exit
[ etc. ]

我们在使用脚本形式执行 Python 时,可以接收命令行输入的参数,具体使用可以参照 Python 3 命令行参数


print("Hello, World!")
x = 5
y = 10
print(x + y)
for i in range(3):
 print(i)
x = 10
if x> 5:
 print("x is greater than 5")
def add(a, b):
 return a + b
print(add(3, 4))
AI 思考中...

9 篇笔记 写笔记

  1. #0

    淡然感世

    107***[email protected]

    1224

    在 Windows 下可以不写第一行注释:

    #!/usr/bin/python3
    

    第一行注释标的是指向 python 的路径,告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器。

    此外还有以下形式(推荐写法):

    #!/usr/bin/env python3
    

    这种用法先在 env(环境变量)设置里查找 python 的安装路径,再调用对应路径下的解释器程序完成操作。

    淡然感世

    107***[email protected]

    9年前 (2017年04月09日)
  2. #0

    荆棘乱

    llc***[email protected]

    672

    关于注释,也可以使用 ''' ''' 的格式在三引号之间书写较长的注释;

    ''' ''' 还可以用于在函数的首部对函数进行一个说明:

    def example(anything):
     '''形参为任意类型的对象,
     这个示例函数会将其原样返回。
     '''
     return anything
    

    help() 函数

    调用 python 的 help() 函数可以打印输出一个函数的文档字符串:

    # 如下实例,查看 max 内置函数的参数列表和规范的文档
    >>> help(max)
    ……显示帮助信息……
    
    按下 : q 两个按键即退出说明文档

    如果仅仅想得到文档字符串:

    >>> print(max.__doc__) # 注意,doc的前后分别是两个下划线
    max(iterable, *[, default=obj, key=func]) -> value
    max(arg1, arg2, *args, *[, key=func]) -> value
    With a single iterable argument, return its biggest item. The
    default keyword-only argument specifies an object to return if
    the provided iterable is empty.
    With two or more arguments, return the largest argument.
    

    荆棘乱

    llc***[email protected]

    9年前 (2017年05月05日)
  3. #0

    杨叔儿

    231***[email protected]

    513

    在 print 打印的时候双引号与单引号都可以当做定界符使用,且可以嵌套。

    被嵌套的会被解释成为标点符号,反之一样。

    代码实例:

    print("Hello'World!")

    这句代码执行时,外侧的双引号为定界符,里面的那个单引号为标点符号。

    输出:

    Hello'World!
    print('Hello"World!')

    这句代码执行时,外侧的单引号为定界符,里面的那个双引号为标点符号。

    输出:

    Hello"World!

    杨叔儿

    231***[email protected]

    8年前 (2018年05月16日)
  4. #0

    Python初学者

    pan***[email protected]

    418

    要善用 help() 方法

    通过命令 help("print") 我们知道这个方法里第三个为缺省参数 sep=' '

    这里表示我们使用分隔符为一个空格。

    >>> help("print")
    Help on built-in function print in module builtins:
    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.

    所以在打印 dict 类的使用, 可以这样写:

    >>> def getPairs(dict):
    ... for k,v in dict.items() :
    ... print(k,v,sep=':')
    ...

    测试代码:

    >>> getPairs({ x : x ** 3 for x in (1,2,3,4)})
    1:1
    2:8
    3:27
    4:64
    >>>

    Python初学者

    pan***[email protected]

    8年前 (2018年11月23日)
  5. #0

    "Windows 命令行窗口"下清屏,可用下面两种方法。

    第一种方法,在命令行窗口输入:

    >>> import os
    >>> i=os.system("cls")
    

    第二种方法,在命令行窗口输入:

    >>> import subprocess
    >>> i=subprocess.call("cls", shell=True)
    落落 7年前 (2019年03月22日)
  6. #0

    yester

    zha***[email protected]

    737

    关于 import 的小结,以 time 模块为例:

    1、将整个模块导入,例如:import time,在引用时格式为:time.sleep(1)

    2、将整个模块中全部函数导入,例如:from time import *,在引用时格式为:sleep(1)

    3、将模块中特定函数导入,例如:from time import sleep,在引用时格式为:sleep(1)

    4、将模块换个别名,例如:import time as abc,在引用时格式为:abc.sleep(1)

    yester

    yester

    zha***[email protected]

    7年前 (2019年04月19日)
  7. #0

    兔子脚

    syf***[email protected]

    1028

    当字符串内容为浮点型要转换为整型时,无法直接用 int() 转换:

    a='2.1' # 这是一个字符串
    print(int(a))

    会报错 "invalid literal for int() "

    需要把字符串先转化成 float 型再转换成 int 型:

    a='2.1'
    print(int(float(a)))

    输出 2

    兔子脚

    syf***[email protected]

    7年前 (2019年08月12日)
  8. #0

    xvpi

    904***[email protected]

    259

    类似于 C/C++ 的 printf,Python 的 print 也能实现格式化输出,方法是使用 % 操作符,它会将左边的字符串当做格式字符串,将右边的参数代入格式字符串:

    print("100 + 200 = %d" % 300) #左边的%d被替换成右边的300
    print("A的小写是%s" % "a") #左边的%s被替换成右边的a

    得到的结果是:

    100 + 200 = 300A的小写是a

    如果要带入多个参数,则需要用 () 包裹代入的多个参数,参数与参数之间用逗号隔开,参数的顺序应该对应格式字符串中的顺序:

    print("%d + %d = %d" % (100,200,300))
    print("%s %s" % ("world","hello"))

    得到的结果是:

    100 + 200 = 300world hello

    格式字符串中,不同占位符的含义:

    • %s: 作为字符串
    • %d: 作为有符号十进制整数
    • %u: 作为无符号十进制整数
    • %o: 作为无符号八进制整数
    • %x: 作为无符号十六进制整数,a〜f采用小写形式
    • %X: 作为无符号十六进制整数,A〜F采用大写形式
    • %f: 作为浮点数
    • %e,%E: 作为浮点数,使用科学计数法
    • %g,%G: 作为浮点数,使用最低有效数位

    xvpi

    904***[email protected]

    4年前 (2022年12月19日)
  9. #0

    runoob

    min***[email protected]

    78

    在 Python 中,from somemodule import *import somemodule 有一些重要的区别,主要体现在命名空间和可访问性上。

    import somemodule - 导入整个模块。

    使用模块中的内容时,需要使用模块名作为前缀。例如,如果 somemodule 中有一个函数 foo,你需要这样调用它:somemodule.foo()。

    优点是命名空间保持清晰,避免了与当前模块中的变量和函数名冲突。

    import math
    print(math.sqrt(16)) # 输出: 4.0

    from somemodule import * - 导入模块中的所有公开对象(函数、变量、类等)到当前命名空间。

    使用模块中的内容时,不需要使用模块名作为前缀。例如,如果 somemodule 中有一个函数 foo,你可以直接调用它:foo()。

    缺点是可能会引入命名冲突,因为当前命名空间中的变量和函数名可能与导入的模块中的某些名字冲突。

    from math import *
    print(sqrt(16)) # 输出: 4.0

    总结来说,import somemodule 保持了命名空间的清晰性和安全性,减少了命名冲突的风险,而 from somemodule import * 虽然简洁,但可能导致命名冲突和代码的可读性降低。通常建议使用 import somemodule 或者 from somemodule import specific_function 这种更明确的导入方式。

    更多内容可以参考:Python import 和 from ... import 的主要区别

    runoob

    runoob

    min***[email protected]

    2年前 (2024年07月18日)

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /