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

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 基本数据类型

Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

在 Python 中,变量就是变量,它没有类型,我们所说的类型是变量所指的内存中对象的类型。

等号 = 用来给变量赋值。等号左边是变量名,右边是存储在变量中的值。例如:

实例(Python 3.0+)

#!/usr/bin/python3

counter = 100 # 整型变量
miles = 1000.0 # 浮点型变量
name = "runoob" # 字符串

print(counter)
print(miles)
print(name)

运行实例 »

执行以上程序会输出如下结果:

100
1000.0
runoob

多个变量赋值

Python 允许你同时为多个变量赋值。例如:

a = b = c = 1

以上实例创建一个整型对象,值为 1,三个变量被赋予相同的数值。

你也可以为多个变量同时指定不同的值。例如:

a, b, c = 1, 2, "runoob"

以上实例中,整型对象 1 和 2 分别分配给变量 a 和 b,字符串对象 "runoob" 分配给变量 c。

可以通过 type() 函数查看变量的类型:

实例

# 变量定义
x = 10 # 整数
y = 3.14 # 浮点数
name = "Alice" # 字符串
is_active = True # 布尔值

# 多变量赋值
a, b, c = 1, 2, "three"

# 查看数据类型
print(type(x)) # <class 'int'>
print(type(y)) # <class 'float'>
print(type(name)) # <class 'str'>
print(type(is_active)) # <class 'bool'>

标准数据类型

Python3 中有 6 种标准数据类型,以及 bool 布尔类型(bool 是 int 的子类,有时单独列出):

  • Number(数字)
  • String(字符串)
  • bool(布尔类型)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)

按是否可变,可以分为以下两类:

  • 不可变数据(4 个):Number(数字)、String(字符串)、bool(布尔)、Tuple(元组)
  • 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)

此外还有一些高级的数据类型,如字节数组类型 bytes。


Number(数字)

Python3 支持 int、float、bool、complex(复数)

在 Python 3 里,只有一种整数类型 int,表示为长整型,没有 Python 2 中的 Long。

内置的 type() 函数可以用来查询变量所指的对象类型。

>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
&lt;class 'int'&gt; &lt;class 'float'&gt; &lt;class 'bool'&gt; &lt;class 'complex'&gt;

此外还可以用 isinstance() 来判断:

实例

>>> a = 111
>>> isinstance(a, int)
True

isinstancetype 的区别在于:

  • type() 不会认为子类是一种父类类型。
  • isinstance() 会认为子类是一种父类类型。
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> isinstance(A(), A)
True
>>> type(A()) == A
True
>>> isinstance(B(), A)
True
>>> type(B()) == A
False

注意:Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加,True==1、False==0 会返回 True,但可以通过 is 来判断对象身份。

>>> issubclass(bool, int)
True
>>> True == 1
True
>>> False == 0
True
>>> True + 1
2
>>> False + 1
1
>>> 1 is True
&lt;stdin&gt;:1: SyntaxWarning: "is" with 'int' literal. Did you mean "=="?
False
>>> 0 is False
&lt;stdin&gt;:1: SyntaxWarning: "is" with 'int' literal. Did you mean "=="?
False

为什么会出现 SyntaxWarning?

Python 检测到你在用 is 比较一个字面量整数(如 1)和 True,这通常是代码错误——因为 is 比较的是对象身份(是否同一个对象),而不是值是否相等。Python 建议使用 == 来比较值,除非你确实需要检查是否是同一个对象。

在 Python 2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。

当你指定一个值时,Number 对象就会被创建:

var1 = 1
var2 = 10

可以使用 del 语句删除对象引用:

del var1[, var2[, var3[...., varN]]]

例如:

del var
del var_a, var_b

数值运算

实例

>>> 5 + 4 # 加法
9
>>> 4.3 - 2 # 减法
2.3
>>> 3 * 7 # 乘法
21
>>> 2 / 4 # 除法,得到一个浮点数
0.5
>>> 2 // 4 # 整除,得到一个整数
0
>>> 17 % 3 # 取余
2
>>> 2 ** 5 # 乘方
32

注意:

  • Python 可以同时为多个变量赋值,如 a, b = 1, 2
  • 一个变量可以通过赋值指向不同类型的对象。
  • 数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数(向下取整)。
  • 在混合计算时,Python 会把整型自动转换为浮点数。

数值类型实例

intfloatcomplex
100.03.14j
10015.2045.j
-786-21.99.322e-36j
0o1732.3e+18.876j
-0o112-90.-.6545+0J
-0x260-32.54e1003e+26J
0x6970.2E-124.53e-7j

注意:Python 3 中整数字面量不允许前导零(如 080),八进制数必须使用 0o 前缀(如 0o17),十六进制使用 0x 前缀(如 0x69),二进制使用 0b 前缀。

Python 还支持复数,复数由实数部分和虚数部分构成,可以用 a + bj 或者 complex(a, b) 表示,复数的实部 a 和虚部 b 都是浮点型。


String(字符串)

Python 中的字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符。

字符串截取的语法格式如下:

变量[头下标:尾下标]

索引值以 0 为开始值,-1 为从末尾开始的位置。

加号 + 是字符串的连接符,星号 * 表示复制当前字符串,与之结合的数字为复制的次数。实例如下:

实例

#!/usr/bin/python3

my_str = 'Runoob' # 定义一个字符串变量(避免使用 str 作为变量名,会覆盖内置类型)

print(my_str) # 打印整个字符串:Runoob
print(my_str[0:-1]) # 打印索引 0 到倒数第二个字符(不含最后一个):Runoo
print(my_str[0]) # 打印第一个字符:R
print(my_str[2:5]) # 打印索引 2、3、4 的字符(不含索引 5):noo
print(my_str[2:]) # 打印从索引 2 开始到末尾:noob
print(my_str * 2) # 重复打印两次:RunoobRunoob
print(my_str + "TEST") # 字符串拼接:RunoobTEST

执行以上程序会输出如下结果:

Runoob
Runoo
R
noo
noob
RunoobRunoob
RunoobTEST

Python 使用反斜杠 \ 转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个 r,表示原始字符串:

实例

>>> print('Ru\noob')
Ru
oob
>>> print(r'Ru\noob')
Ru\noob

另外,反斜杠(\)可以作为续行符,表示下一行是上一行的延续。也可以使用 """...""" 或者 '''...''' 跨越多行。

注意,Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。

实例

>>> word = 'Python'
>>> print(word[0], word[5])
P n
>>> print(word[-1], word[-6])
n P

与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,比如 word[0] = 'm' 会导致错误。

注意:

  • 反斜杠可以用来转义,使用 r 前缀可以让反斜杠不发生转义(原始字符串)。
  • 字符串可以用 + 运算符连接,用 * 运算符重复。
  • Python 中的字符串有两种索引方式:从左往右以 0 开始,从右往左以 -1 开始。
  • Python 中的字符串不能改变,字符串是不可变类型。

bool(布尔类型)

布尔类型即 True 或 False。在 Python 中,True 和 False 都是关键字,表示布尔值。

布尔类型可以用来控制程序的流程,比如判断某个条件是否成立,或者在某个条件满足时执行某段代码。

布尔类型特点:

  • 布尔类型只有两个值:True 和 False。
  • bool 是 int 的子类,因此布尔值可以被看作整数来使用,其中 True 等价于 1,False 等价于 0。
  • 布尔类型可以和其他数据类型进行比较,比如数字、字符串等。在比较时,Python 会将 True 视为 1,False 视为 0。
  • 布尔类型可以和逻辑运算符一起使用,包括 andornot,用来组合多个布尔表达式。
  • 布尔类型也可以被转换成其他数据类型,比如整数、浮点数和字符串。在转换时,True 会被转换成 1,False 会被转换成 0。
  • 可以使用 bool() 函数将其他类型的值转换为布尔值。以下值转换为布尔值时为 False:NoneFalse、零(00.00j)、空序列(如 ''()[])和空映射(如 {})。其他所有值转换为布尔值时均为 True

实例

# 布尔类型的值和类型
a = True
b = False
print(type(a)) # <class 'bool'>
print(type(b)) # <class 'bool'>

# 布尔类型的整数表现
print(int(True)) # 1
print(int(False)) # 0

# 使用 bool() 函数进行转换
print(bool(0)) # False
print(bool(42)) # True
print(bool('')) # False
print(bool('Python')) # True
print(bool([])) # False
print(bool([1, 2, 3])) # True

# 布尔逻辑运算
print(True and False) # False
print(True or False) # True
print(not True) # False

# 布尔比较运算
print(5 > 3) # True
print(2 == 2) # True
print(7 < 4) # False

# 布尔值在控制流中的应用
if True:
print("This will always print")

if not False:
print("This will also always print")

x = 10
if x:
print("x 是非零值,在布尔上下文中为 True")

注意:在 Python 中,所有非零的数字和非空的字符串、列表、元组等数据类型都被视为 True,只有 0、空字符串、空列表、空元组等被视为 False。因此,在进行布尔类型转换时,需要注意数据类型的真假性。


List(列表)

List(列表)是 Python 中使用最频繁的数据类型。

列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字、字符串,甚至可以包含列表(即嵌套列表)。

列表写在方括号 [] 之间,用逗号分隔开的元素列表。

和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。

列表截取的语法格式如下:

变量[头下标:尾下标]

索引值以 0 为开始值,-1 为从末尾的开始位置。

加号 + 是列表连接运算符,星号 * 是重复操作。如下实例:

实例

#!/usr/bin/python3

my_list = ['abcd', 786, 2.23, 'runoob', 70.2] # 避免使用 list 作为变量名,会覆盖内置类型
tinylist = [123, 'runoob']

print(my_list) # 打印整个列表:['abcd', 786, 2.23, 'runoob', 70.2]
print(my_list[0]) # 打印第一个元素(索引 0):abcd
print(my_list[1:3]) # 打印索引 1 和 2 的元素(不含索引 3):[786, 2.23]
print(my_list[2:]) # 打印从索引 2 开始到末尾的所有元素:[2.23, 'runoob', 70.2]
print(tinylist * 2) # 重复打印 tinylist 两次:[123, 'runoob', 123, 'runoob']
print(my_list + tinylist) # 拼接两个列表

以上实例输出结果:

['abcd', 786, 2.23, 'runoob', 70.2]
abcd
[786, 2.23]
[2.23, 'runoob', 70.2]
[123, 'runoob', 123, 'runoob']
['abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob']

与 Python 字符串不一样的是,列表中的元素是可以改变的:

实例

>>> a = [1, 2, 3, 4, 5, 6]
>>> a[0] = 9
>>> a[2:5] = [13, 14, 15]
>>> a
[9, 2, 13, 14, 15, 6]
>>> a[2:5] = [] # 将对应的元素值设置为空列表,即删除这些元素
>>> a
[9, 2, 6]

List 内置了有很多方法,例如 append()pop() 等等,这在后面会讲到。

注意:

  • 列表写在方括号之间,元素用逗号隔开。
  • 和字符串一样,列表可以被索引和切片。
  • 列表可以使用 + 操作符进行拼接。
  • 列表中的元素是可以改变的(可变类型)。

Python 列表截取可以接收第三个参数,参数作用是截取的步长,以下实例在索引 1 到索引 4 的位置设置步长为 2(每隔一个位置取一个元素)来截取列表:

如果第三个参数为负数表示逆向读取,以下实例用于翻转字符串中的单词顺序:

实例

def reverseWords(input):

# 通过空格将字符串分隔,把各个单词分隔为列表
inputWords = input.split(" ")

# inputWords[-1::-1] 三个参数说明:
# 第一个参数 -1 表示从最后一个元素开始
# 第二个参数为空,表示移动到列表开头
# 第三个参数 -1 表示逆向步进(每次向左移动一个位置)
inputWords = inputWords[-1::-1]

# 重新用空格拼接单词
output = ' '.join(inputWords)

return output

if __name__ == "__main__":
input = 'I like runoob'
rw = reverseWords(input)
print(rw)

输出结果为:

runoob like I

Tuple(元组)

元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。

元组中的元素类型也可以不相同:

实例

#!/usr/bin/python3

my_tuple = ('abcd', 786, 2.23, 'runoob', 70.2) # 避免使用 tuple 作为变量名
tinytuple = (123, 'runoob')

print(my_tuple) # 输出完整元组
print(my_tuple[0]) # 输出第一个元素:abcd
print(my_tuple[1:3]) # 输出索引 1 和 2 的元素:(786, 2.23)
print(my_tuple[2:]) # 输出从索引 2 开始的所有元素
print(tinytuple * 2) # 输出两次 tinytuple
print(my_tuple + tinytuple) # 连接两个元组

以上实例输出结果:

('abcd', 786, 2.23, 'runoob', 70.2)
abcd
(786, 2.23)
(2.23, 'runoob', 70.2)
(123, 'runoob', 123, 'runoob')
('abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob')

元组与字符串类似,可以被索引且下标从 0 开始,-1 为从末尾开始的位置,也可以进行截取。

其实,可以把字符串看作一种特殊的元组。

实例

>>> tup = (1, 2, 3, 4, 5, 6)
>>> print(tup[0])
1
>>> print(tup[1:5])
(2, 3, 4, 5)
>>> tup[0] = 11 # 修改元组元素的操作是非法的
Traceback (most recent call last):
File "&lt;stdin&gt;", line 1, in &lt;module&gt;
TypeError: 'tuple' object does not support item assignment

虽然元组的元素不可改变,但它可以包含可变的对象,比如 list 列表。

构造包含 0 个或 1 个元素的元组比较特殊,有一些额外的语法规则:

tup1 = () # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号

如果你想创建只有一个元素的元组,需要在元素后面添加一个逗号,以区分它是元组而不是普通的值。因为在没有逗号的情况下,Python 会将括号解释为数学运算中的括号:

not_a_tuple = (42) # 这是整数 42,不是元组

stringlisttuple 都属于 sequence(序列)。

注意:

  • 与字符串一样,元组的元素不能修改(不可变类型)。
  • 元组也可以被索引和切片,方法与列表相同。
  • 注意构造包含 0 或 1 个元素的元组的特殊语法规则。
  • 元组也可以使用 + 操作符进行拼接。

Set(集合)

Python 中的集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素。集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。

在 Python 中,集合使用大括号 {} 表示,元素之间用逗号 , 分隔。也可以使用 set() 函数创建集合。

注意:创建一个空集合必须用 set() 而不是 {},因为 {} 创建的是一个空字典。

创建格式:

parame = {value01, value02, ...}
或者
set(value)

实例

#!/usr/bin/python3

sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'}

print(sites) # 输出集合(无序,重复元素会被自动去掉)

# 成员测试
if 'Runoob' in sites:
print('Runoob 在集合中')
else:
print('Runoob 不在集合中')

# set 可以进行集合运算
a = set('abracadabra')
b = set('alacazam')

print(a) # a 中的唯一字符

print(a - b) # a 和 b 的差集(在 a 中但不在 b 中)
print(a | b) # a 和 b 的并集(在 a 或 b 中)
print(a & b) # a 和 b 的交集(同时在 a 和 b 中)
print(a ^ b) # a 和 b 的对称差集(在 a 或 b 中,但不同时存在)

以上实例输出结果:

{'Zhihu', 'Baidu', 'Taobao', 'Runoob', 'Google', 'Facebook'}
Runoob 在集合中
{'b', 'c', 'a', 'r', 'd'}
{'r', 'b', 'd'}
{'b', 'c', 'a', 'z', 'm', 'r', 'l', 'd'}
{'c', 'a'}
{'z', 'b', 'm', 'r', 'l', 'd'}

Dictionary(字典)

字典(dictionary)是 Python 中另一个非常有用的内置数据类型。

字典是一种映射类型,用 {} 标识,它是一个 键(key) : 值(value) 的集合。键(key) 必须使用不可变类型,且在同一个字典中键必须是唯一的。

注意:Python 3.7 起,字典会保持元素的插入顺序,不再是无序的。如果需要有序字典的特性,直接使用普通 dict 即可。

实例

#!/usr/bin/python3

my_dict = {}
my_dict['one'] = "1 - 菜鸟教程"
my_dict[2] = "2 - 菜鸟工具"

tinydict = {'name': 'runoob', 'code': 1, 'site': 'www.runoob.com'}

print(my_dict['one']) # 输出键为 'one' 的值
print(my_dict[2]) # 输出键为 2 的值
print(tinydict) # 输出完整的字典
print(tinydict.keys()) # 输出所有键
print(tinydict.values()) # 输出所有值

以上实例输出结果:

1 - 菜鸟教程
2 - 菜鸟工具
{'name': 'runoob', 'code': 1, 'site': 'www.runoob.com'}
dict_keys(['name', 'code', 'site'])
dict_values(['runoob', 1, 'www.runoob.com'])

构造函数 dict() 可以直接从键值对序列中构建字典:

实例

>>> dict([('Runoob', 1), ('Google', 2), ('Taobao', 3)])
{'Runoob': 1, 'Google': 2, 'Taobao': 3}
>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}
>>> dict(Runoob=1, Google=2, Taobao=3)
{'Runoob': 1, 'Google': 2, 'Taobao': 3}

{x: x**2 for x in (2, 4, 6)} 使用的是字典推导式,更多推导式内容可以参考:Python 推导式

另外,字典类型也有一些内置的函数,例如 clear()keys()values() 等。

注意:

  • 字典是一种映射类型,它的元素是键值对。
  • 字典的键必须为不可变类型,且不能重复。
  • 创建空字典使用 {}
  • Python 3.7 起字典保持插入顺序。

bytes 类型

在 Python3 中,bytes 类型表示的是不可变的二进制序列(byte sequence)。与字符串类型不同的是,bytes 类型中的元素是整数值(0 到 255 之间的整数),而不是 Unicode 字符。

bytes 类型通常用于处理二进制数据,比如图像文件、音频文件、视频文件等。在网络编程中,也经常使用 bytes 类型来传输二进制数据。

创建 bytes 对象最常见的方式是使用 b 前缀:

实例

x = b"hello" # 使用 b 前缀创建 bytes 对象
print(x) # b'hello'
print(type(x)) # <class 'bytes'>
print(x[0]) # 104('h' 的 ASCII 值,bytes 元素是整数)

也可以使用 bytes() 函数将其他类型的对象转换为 bytes 类型,第二个参数指定编码方式:

x = bytes("hello", encoding="utf-8")

与字符串类型类似,bytes 类型也支持切片、拼接、查找、替换等操作。由于 bytes 类型是不可变的,修改操作需要创建一个新的 bytes 对象:

实例

x = b"hello"
y = x[1:3] # 切片操作,得到 b'el'
z = x + b"world" # 拼接操作,得到 b'helloworld'
print(y) # b'el'
print(z) # b'helloworld'

需要注意的是,bytes 类型中的元素是整数值,因此在进行比较操作时需要使用相应的整数值。可以用 ord() 函数将字符转换为对应的整数值:

实例

x = b"hello"
if x[0] == ord("h"): # ord("h") 返回 104
print("第一个元素是 'h'")

Python 数据类型转换

有时候我们需要对数据内置的类型进行转换,只需要将数据类型作为函数名即可。在下一章节 Python3 数据类型转换 会具体介绍。

以下几个内置函数可以执行数据类型之间的转换,这些函数返回一个新的对象,表示转换后的值:

函数描述

int(x [,base])

将 x 转换为一个整数

float(x)

将 x 转换为一个浮点数

complex(real [,imag])

创建一个复数

str(x)

将对象 x 转换为字符串

repr(x)

将对象 x 转换为表达式字符串

eval(str)

计算字符串中的有效 Python 表达式,并返回一个对象

tuple(s)

将序列 s 转换为一个元组

list(s)

将序列 s 转换为一个列表

set(s)

转换为可变集合

dict(d)

创建一个字典。d 必须是一个 (key, value) 元组序列。

frozenset(s)

转换为不可变集合

chr(x)

将一个整数转换为对应的字符

ord(x)

将一个字符转换为它的整数值(Unicode 码点)

hex(x)

将一个整数转换为十六进制字符串

oct(x)

将一个整数转换为八进制字符串

AI 思考中...

21 篇笔记 写笔记

  1. #0

    荆棘乱

    llc***[email protected]

    676

    元组(小拓展)

    一般来说,函数的返回值一般为一个。

    而函数返回多个值的时候,是以元组的方式返回的。

    示例(命令行下):

    >>>def example(a,b):
    ... return (a,b)
    ...
    >>>type(example(3,4))
    <class 'tuple'>
    >>>

    python中的函数还可以接收可变长参数,比如以 "*" 开头的的参数名,会将所有的参数收集到一个元组上。

    例如:

    def test(*args):
     print(args)
     return args
    print(type(test(1,2,3,4))) #可以看见其函数的返回值是一个元组
    

    字典(小拓展)

    python中的字典是使用了一个称为散列表(hashtable)的算法(不具体展开),

    其特点就是:不管字典中有多少项,in操作符花费的时间都差不多。

    如果把一个字典对象作为for的迭代对象,那么这个操作将会遍历字典的键:

    def example(d):
     # d 是一个字典对象
     for c in d:
     print(c)
     #如果调用函数试试的话,会发现函数会将d的所有键打印出来;
     #也就是遍历的是d的键,而不是值.

    荆棘乱

    llc***[email protected]

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

    我去咬你啦

    815***[email protected]

    367

    针对楼上的 字典 拓展,做测试的时候,想要输出 kye:value的组合发现可以这样:

    for c in dict:
     print(c,':',dict[c])
    

    或者

    for c in dict:
     print(c,end=':');
     print(dict[c])
    

    于是发现 print()函数 其实可以 添加多个参数,用逗号 隔开。

    本来想要用

    for c in dict:
     print(c+':');
     print(dict[c])
    

    这样的方式打印 key:value结果发现其实 key不一定是 string类型,所以 用+ 号会出问题。

    我去咬你啦

    815***[email protected]

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

    愤怒的胸毛毛

    zha***[email protected]

    239

    在list的使用中,开始时很容易忽视的一点是:

    list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
    print (list[1:3]) # 从第二个开始输出到第三个元素

    list[1:3] 其实输出的只有两个变量,即list中第二个元素到第三个元素,并不是第1 第2 第3三个元素,而且要注意的是

    print (list[2])
    print (list[2:3])

    这两句话打印的内容其实是一样的,

    2.23
    [2.23]

    但是第二句话有中括号

    ------------------------------------------------------

    以下是网友 [email protected] 的补充:

    list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
    print (list[1:3]) # 从第二个开始输出到第三个元素
    # 获得结果 [786, 2.23]

    其实我觉得可以这样理解:

    print (list[1:3]) # 从数组下标为1的数开始获取直到数组下标为3(但不包含3)的数为止,输出这段
    # 获得结果 [786, 2.23]
    

    其实我们可以试验一下:

    print (list[1:0]) # 没有输出的值
    # 获得结果 []
    print (list[1:1]) # 没有输出的值
    # 获得结果 []
    print (list[0:1]) # 没有输出的值
    # 获得结果 ['abcd']
    

    其实中括号里的值还可以为负数:

    >>> print(arrtest[1:-1]) # 从下标为1的数开始,输出到下标为4但不包含4的所有值
    [786, 2.23, 'runoob']
    >>> print(arrtest[-3:-2]) # 从下标为2的数开始,输出到下标为3但不包含3的所有值
    [2.23]
    

    ----------------------------

    list 补充:

    list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
    print (list[2])
    print (list[2:3])

    这两句话打印的内容其实是一样的:

    2.23
    [2.23]

    但注意是不同的类型,用变量接收一下:

    a = list[2]
    b = list[2:3]
    type(a) -> <class 'float'>
    type(b) -> <class 'list'>

    愤怒的胸毛毛

    zha***[email protected]

    9年前 (2017年07月02日)
  4. #0

    hellowqp

    wqp***[email protected]

    124

    python 与 C 语言和 Java 语言的一点不同,表现在它的变量不需要声明变量类型,这是因为像 C 语言和 Java 语言来说,它们是静态的,而 python 是动态的,变量的类型由赋予它的值来决定,例如:

    >>> a = 1
    >>> a = 1.001
    >>> a = "python"
    >>> print(a)
    python
    >>> 

    第一次为变量 a 赋值为整型,第二次赋值是浮点数,第三次是一个字符串,最后输出时只保留了最后一次的赋值。

    hellowqp

    wqp***[email protected]

    9年前 (2017年07月08日)
  5. #0

    type 是用于求一个未知数据类型对象,而 isinstance 是用于判断一个对象是否是已知类型。

    type 不认为子类是父类的一种类型,而isinstance会认为子类是父类的一种类型。

    可以用 isinstance 判断子类对象是否继承于父类,type 不行。

    综合以上几点,type 与 isinstance 虽然都与数据类型相关,但两者其实用法不同,type 主要用于判断未知数据类型,isinstance 主要用于判断 A 类是否继承于 B 类:

    # 判断子类对象是否继承于父类
    class father(object):
     pass
    class son(father):
     pass
    if __name__ == '__main__':
     print (type(son())==father)
     print (isinstance(son(),father))
     print (type(son()))
     print (type(son))

    运行结果:

    False
    True
    <class '__main__.son'>
    <type 'type'>
    9年前 (2017年09月15日)
  6. #0

    妞妞

    704***[email protected]

    164

    字典(小拓展)

    输入 dict 的键值对,可直接用 items() 函数:

    dict1 = {'abc':1,"cde":2,"d":4,"c":567,"d":"key1"}
    for k,v in dict1.items():
     print(k,":",v)

    妞妞

    704***[email protected]

    9年前 (2017年12月07日)
  7. #0

    hjc132

    huj***[email protected]

    192

    字典(小拓展)

    原文说 dict(d)创建一个字典。d 必须是一个序列 (key,value)元组。

    其实d不一定必须为一个序列元组,如下:

    >>> dict_1 = dict([('a',1),('b',2),('c',3)]) #元素为元组的列表
    >>> dict_1
    {'a': 1, 'b': 2, 'c': 3}
    >>> dict_2 = dict({('a',1),('b',2),('c',3)})#元素为元组的集合
    >>> dict_2
    {'b': 2, 'c': 3, 'a': 1}
    >>> dict_3 = dict([['a',1],['b',2],['c',3]])#元素为列表的列表
    >>> dict_3
    {'a': 1, 'b': 2, 'c': 3}
    >>> dict_4 = dict((('a',1),('b',2),('c',3)))#元素为元组的元组
    >>> dict_4
    {'a': 1, 'b': 2, 'c': 3}

    hjc132

    huj***[email protected]

    9年前 (2017年12月10日)
  8. #0

    好好学习天天向上

    522***[email protected]

    87

    集合与字典

    无序:集合是无序的,所以不支持索引;字典同样也是无序的,但由于其元素是由键(key)和值(value)两个属性组成的键值对,可以通过键(key)来进行索引

    元素唯一性:集合是无重复元素的序列,会自动去除重复元素;字典因为其key唯一性,所以也不会出现相同元素

    好好学习天天向上

    522***[email protected]

    8年前 (2018年03月01日)
  9. #0
    #coding=utf8 
    ''''' 
    复数是由一个实数和一个虚数组合构成,表示为:x+yj 
    一个负数时一对有序浮点数(x,y),其中x是实数部分,y是虚数部分。 
    Python语言中有关负数的概念: 
    1、虚数不能单独存在,它们总是和一个值为0.0的实数部分一起构成一个复数 
    2、复数由实数部分和虚数部分构成 
    3、表示虚数的语法:real+imagej 
    4、实数部分和虚数部分都是浮点数 
    5、虚数部分必须有后缀j或J 
     
    复数的内建属性: 
    复数对象拥有数据属性,分别为该复数的实部和虚部。 
    复数还拥有conjugate方法,调用它可以返回该复数的共轭复数对象。 
    复数属性:real(复数的实部)、imag(复数的虚部)、conjugate()(返回复数的共轭复数) 
    ''' 
    class Complex(object): 
     '''''创建一个静态属性用来记录类版本号''' 
     version=1.0 
     '''''创建个复数类,用于操作和初始化复数''' 
     def __init__(self,rel=15,img=15j): 
     self.realPart=rel 
     self.imagPart=img 
     
     #创建复数 
     def creatComplex(self): 
     return self.realPart+self.imagPart 
     #获取输入数字部分的虚部 
     def getImg(self): 
     #把虚部转换成字符串 
     img=str(self.imagPart) 
     #对字符串进行切片操作获取数字部分 
     img=img[:-1] 
     return float(img) 
     
    def test(): 
     print "run test..........." 
     com=Complex() 
     Cplex= com.creatComplex() 
     if Cplex.imag==com.getImg(): 
     print com.getImg() 
     else: 
     pass 
     if Cplex.real==com.realPart: 
     print com.realPart 
     else: 
     pass 
     #原复数 
     print "the religion complex is :",Cplex 
     #求取共轭复数 
     print "the conjugate complex is :",Cplex.conjugate() 
     
    if __name__=="__main__": 
     test()
    8年前 (2018年03月11日)
  10. #0

    符号

    974***[email protected]

    42

    切片还可以设置步长

    demo = [1,2,3,4,5,6]
    new_demo = demo[1::2] # 2 就是步长 意思是从索引为 1 的元素开始 每隔2个元素取一次元素
    new_demo = [2,4,6] 
    # 以索引为列 [索引] 和 [索引:索引:步长] 的区别
    # demo[索引] 取出的原列表中索引对应的元素
    # demo[索引:索引:步长] 切片得到的是一个新列表
    符号

    符号

    974***[email protected]

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

    王二的弟弟

    182***[email protected]

    参考地址

    62

    bool 型

    Python 中布尔值使用常量 TrueFalse 来表示。

    1、在数值上下文环境中,True 被当作 1,False 被当作 0,例如:

    >>> True+3
    4
    >>> False+2
    2
    

    2、其他类型值转换 bool 值时除了 ''、""、''''''、""""""、0、()、[]、{}、None、0.0、0L、0.0+0.0j、FalseFalse 外,其他都为 True 例如:

    >>> bool(-2)
    True
    >>> bool('')
    False
    王二的弟弟

    王二的弟弟

    182***[email protected]

    参考地址

    8年前 (2018年07月25日)
  12. #0

    健子

    136***[email protected]

    79

    对应一楼 ,函数的参数为多个时,不一定是以元组的形式返回的,还是要看自己定义的返回形式是什么:

    >>> def example(a,b):
    ... return (a,b)
    ... 
    >>> type(example(3,4))
    <type 'tuple'>
    >>> def example(a,b):
    ... return a,b
    ... 
    >>> type(example(3,4))
    <type 'tuple'>
    >>> def example(a,b):
    ... return [a,b]
    ... 
    >>> type(example(3,4))
    <type 'list'>

    健子

    136***[email protected]

    8年前 (2018年12月25日)
  13. #0

    went000

    751***[email protected]

    116

    针对楼上对一楼的观点提出的不同意见,但是一楼实际说的是返回值有多个时,而非楼上说的参数为多个。

    >>> type(example(3,4))
    <type 'tuple'>
    >>> def example(a,b):
    ... return [a,b]
    ... 
    >>> type(example(3,4))
    <type 'list'>

    以上实际返回值也只有一个,一个 List 类型的参数。

    一楼所说的返回值为多个是:

    >>> type(example(3,4))
    <type 'tuple'>
    >>> def example(a,b):
    ... return a,b
    ... 
    >>> type(example(3,4))
    <type 'tuple'>

    went000

    751***[email protected]

    8年前 (2019年01月18日)
  14. #0

    flaray

    144***[email protected]

    37

    Bool 型小知识 :

    • Python2 支持:int、float、long、complex(复数)
    • Python3 支持:int、float、bool、complex(复数)

    Python3 废除了 long 类型,将 0 和 1 独立出来组成判断对错的 Bool 型,即 0 和 1 可以用来判断 flase 和 true。但是根本上并没有修改原则。这里的 Bool 型依然是 int 型的一部分,所以依然能当做数字参与运算,所以 Python3 里的 Bool 型是 int 型的一个特例而不是一个独立的类型。

    flaray

    144***[email protected]

    7年前 (2019年03月06日)
  15. #0

    甄能忽悠呀

    813***[email protected]

    78

    注意:列表、元组、集合有所区别(新人特别容易入坑)。

    列表和元组不会把相同的值合并,但是集合会把相同的合并。

    >>> clist = ['tom','tom','jerry'] #测试列表功能
    >>> print (clist)
    ['tom','tom','jerry']
    >>>ctuple = ('tom','tom','jerry') #测试元组功能
    >>>print(ctuple)
    ('tom','tom','jerry') 
    >>>cset = {'tom','tom','jerry'} #测试集合功能
    >>>print(cset)
    {'tom','jerry'}

    甄能忽悠呀

    813***[email protected]

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

    dianmouren

    yan***[email protected]

    43

    关于列表的创建细节补充:

    >>> o = {1, 2, 3}
    >>> type(o)
    <class 'set'>
    >>> o = {}
    >>> type(o)
    <class 'dict'>

    dianmouren

    yan***[email protected]

    7年前 (2019年10月05日)
  17. #0

    紫竹修韵

    162***[email protected]

    参考地址

    43

    关于字典推导式的一些案例:

    # 字典推导式
    p = {i:str(i) for i in range(1,5)}
    print("p:",p)
    '''
    p: {1: '1', 2: '2', 3: '3', 4: '4'}
    '''
    x = ['A','B','C','D']
    y = ['a','b','c','d']
    n = {i:j for i,j in zip(x,y)}
    print("n:",n)
    '''
    n: {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
    '''
    s = {x:x.strip() for x in ('he','she','I')}
    print("s:",s)
    '''
    s: {'he': 'he', 'she': 'she', 'I': 'I'}
    '''

    紫竹修韵

    162***[email protected]

    参考地址

    7年前 (2020年01月29日)
  18. #0

    Creepercdn

    cre***[email protected]

    61

    所有数据类型都是类。

    也就是说,int、str等数据类型不是函数,只是一个类罢了。

    用int()、str()、list()等都是初始化相应的类,那么123456、"Runoob"、[1,2,3] 等都是相应数据类型的初始化结果。

    有很多人和教学网站都认为int、str、list等数据类型都是函数,但这是错误的。type(int)的输出结果表明int是一个类。

    Creepercdn

    cre***[email protected]

    6年前 (2020年08月03日)
  19. #0

    闫伟超

    yif***[email protected]

    108

    此处延伸下变量和对象之间的关系:

    • 赋值操作,本质是创建引用
    • 变量是变量,对象是对象,当将某个对象赋值给某个变量时,可以认为是创建了变量对该对象的引用
    • 变量没有数据类型之说,只有对象有,即变量不是直接代表对象或对象占用的内存空间
    • Python中,变量无需提前声明,无需指定其数据类型,其表现完全是动态的,其所为的数据类型决定于当前该变量所引用的对象的数据类型
    • 所谓变量对对象的引用,本质是创建了变量指向对象内存空间的指针
    • 对象内存空间,一般最起码有类型和当前被引用次数这两个信息,类型记录了该对象的数据类型,被引用次数记录了该对象内存空间被变量引用的次数
    • 当某对象的被引用次数为0时,Python便会自动回收该对象内存空间

    比如下面的

    a=10
    a='122'
    a=[1,2,3]
    del a

    此时,a在不同的赋值代码行中,引用的对象类型不同,相当于在不断改变a引用的对象,最后当把a变量删除时,其实本质只是删除了a变量名,但由于a引用的[1,2,3]对象,因为a被删除,其被引用次数变为0,也就自动被Python回收,最终表现就是del a时,[1,2,3]也被删除了。

    另外一个小知识是,Python为提升代码执行和内存分配效率,会对一些常用的对象提前创建好,并常驻内存,比如下面:

    id(4) #不管运行多少次该代码,其返回的值均不变,因为python会保持一些常用的数字常驻内存,不会每次都重新分配内存空间
    id('hello world') #每次运行,返回的值均会发生变化,因为每次运行,相当于都在重新分配内存空间

    闫伟超

    yif***[email protected]

    5年前 (2021年02月20日)
  20. #0

    elliotalderson

    274***[email protected]

    38

    type的意思可以理解为:检查这个变量本身的类型,而不用管他的父类的类型

    isinstance的意思可以理解为:判断这个变量的类型是不是属于某一个大类,就好像找家谱一样,判断你是不是这个家族的人

    is用来不仅会对比数值是否一样,还会对比类型是否相同,并且是不是对比父类类型

    elliotalderson

    274***[email protected]

    5年前 (2022年01月16日)
  21. #0

    MING

    110***[email protected]

    24

    列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

    在这里,"键"和"偏移"是指访问集合中元素的不同方法或机制。

    • 偏移(Indexing):

      • 意义:偏移指的是通过元素在集合中的位置来访问该元素。在列表(或数组)中,每个元素都有一个固定的位置或索引,通常从0开始递增。
      • 示例:如果有一个列表 my_list = [10, 20, 30, 40],要访问第二个元素(20),可以使用偏移索引 my_list[1]。这里的 1 就是偏移,它指示了要访问的元素在列表中的位置。
    • 键(Key-based Access):

      • 意义:键是字典(或哈希表)中用于标识和访问值的唯一标识符。字典中的每对键值对都由一个键和与之关联的值组成。
      • 示例:在字典 my_dict = {'a': 10, 'b': 20, 'c': 30} 中,'a''b''c' 是键,它们用来获取与之关联的值。例如,通过键 'b' 可以访问到值 20

    区别总结:

    • 列表的偏移访问依赖于元素在列表中的位置索引(从0开始的整数),因此访问顺序是固定的。
    • 字典的键访问是通过键来获取值,键可以是任何不可变类型的对象(通常是字符串或数字),并且字典中的元素顺序是无序的,因为它们是根据哈希表实现的。

    因此,列表中的元素可以通过其位置(偏移)来有序访问,而字典中的元素是通过键(而非位置)来存取的,并且不保证存取顺序与元素添加的顺序相同。

    MING

    110***[email protected]

    2年前 (2024年06月14日)

点我分享笔记

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

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