在我们使用 Python 的过程中,经常涉及到方法和函数,那他们有什么不同吗?在本文中,让我们通过示例了解 Python 中方法和函数之间的区别。
Python 函数是一系列以特定顺序执行的语句,让我们实现代码可重用性。Python 函数包括内置函数和用户定义的函数。
「1. 用户自定义函数」
讯享网
我们定义了一个名称为“add”的函数,包含两个参数,实现两个数相加的功能。这样我们拥有了一个模块化程序,可以反复调用,实现代码重用。
「2. 内置函数」
在前面的文章中,我们通过示例展示了大约 67 个内置函数的使用方法。这些是 Python 为我们提供的功能。
讯享网
Python 方法就像一个函数,只不过它需要附加到一个对象上。我们通过对象调用一个方法,它可能会对该对象进行更改。因此,方法属于一个类。让我们举个例子。
讯享网
Python 方法与函数不同,方法是使用对象调用。Python 函数可以直接使用,不需要在对象上调用。Python 方法由对象调用,因此方法可以访问对象中的数据。Python 方法可能会改变对象的状态,Python 函数通常只对其进行操作,然后输出某些内容或返回值。这就是Python中方法和函数之间的区别
在 Python 中,我们可以使用赋值运算符 “=” 来创建对象的副本。你可能认为这会创建一个新对象,其实不然,它只创建一个共享引用原始对象的新变量。在本文中,我们将了解浅拷贝 shallow copy 与深拷贝 deep copy 之间的区别。
让我们举一个例子,我们创建一个名为 list1 的列表并使用赋值运算符 “=” 将对象引用传递给 list2。
「输出:」
讯享网
从上面的示例我们看到,两个变量具有相同的id,因此,如果要修改 list1 或 list2 中的任何值,则更改在两者中都可见。
我们再举个例子,不直接使用赋值运算符,而是使用 list() 函数将 list1 转换后再进行赋值。
「输出:」
讯享网
从上面的示例我们看到,两个变量具有不相同的 id,因此,如果要修改 list1 或 list2 中的任何值,则两者互不影响。
「对象拷贝时,不拷贝子对象的内容,只拷贝子对象的引用,子对象的修改直接影响源对象,可以称为浅拷贝。如果会连子对象的内存全部拷贝一份,对子对象的修改不会影响源对象,可以称为深拷贝。」
为了清晰明确的创建这些对象的“真实副本”或“克隆”,我们可以使用 Python 中的 copy 模块。我们使用复制模块。copy() 返回对象的浅拷贝,deepcopy() 返回对象的深拷贝。
「输出:」
讯享网
使用 copy() 进行浅拷贝。对于复杂数据结构,比如以上示例,list1 和 list2 指向不同的对象,但指向同一个子列表 [4,5,6]。
「输出:」
讯享网
使用 deepcopy() 进行深拷贝。比如以上示例,list1 和 list2 是完全独立的两个对象。

今天我们了解了 Python 中的浅拷贝与深拷贝。我们还了解到,浅拷贝对象只是部分独立于原始对象。而对于深拷贝,对象彼此完全独立。对于不同的数据结构,相同的操作会有不同的结果。
我们经常使用 Python 输出数据,有时一些复杂的数据可能会让人难以阅读。在本教程中,我们将学习 Python 中一个非常有用的内置模块 pprint,可以让你以易读、漂亮的方式输出复杂数据。


pprint 全称 Data pretty printer,提供了一种以格式良好且更具可读性的方式漂亮的输出任意 Python 数据结构的功能。
「安装:」
「语法格式:」
「参数:」
-
indent:缩进,提供了每个递归级别的缩进量
-
width:宽度,所需的输出宽度
-
depth:要打印的级别数
-
stream:流,设置输出流
-
sort_dicts:是否按字典键排序。
-
underscore_numbers:在数字中每千分之一的位置添加分隔符
-
compact:紧凑,在每行纳尽可能多的项目
为了清晰明确的创建这些对象的“真实副本”或“克隆”,我们可以使用 Python 中的 copy 模块。我们使用复制模块。copy() 返回对象的浅拷贝,deepcopy() 返回对象的深拷贝。
「输出:」
讯享网
在上面的代码示例中,我们可以看到我们使用 pprint() 获得的输出比使用 print() 获得的输出更容易阅读。
pformat() 与 pprint() 类似,区别在于:pprint() 直接输出格式化的数据。pformat() 只是将数据格式化,可以再使用 print() 输出格式化后的数据。
你通常会面临互联网卡顿问题吗?自己构建一个用于检查互联网速度的应用程序不是很有帮助而且很有趣?所以,让我们用 Python 做一个互联网速度测试程序!

这个互联网速度测试程序用于测量设备所连接的互联网质量和速度。当我们遇到任何互联网问题或想要检查互联网带宽时,可以使用它。我们将使用 Tkinter 模块来构建 GUI,使用 speedtest 模块来测试互联网速度。在这里,我们测量以下三种速度:
-
下载速度
-
上传速度
-
ping工具
首先安装 Tkinter 模块:
安装 speedtest 模块:
讯享网
使用 speedtest 模块的 speedtest() 方法来测试。
根据速度范围,对转换值的单位,单位为:“bps”、“Kbps”、“Mbps”和“Gbps”。
我们创建一个窗口,设置标题,大小,然后添加标签以及三个按钮。
讯享网
lambda 函数也可以作为三元运算符工作。
到此,我们已经成功构建了互联网速度测试工具。希望您喜欢它,并且对你会有所帮助。

在使用 Python 进行编码时,有可能不规范的编码不会引发错误,而是出现意想不到的结果。
我们可以使用 “+” 运算符来连接两个字符串。不过,如果两个字符串彼此相邻,即使不使用 “+” 运算符,它们也会隐式的连接在一起。
请注意下面示例代码缺少了一个逗号。
讯享网
代码正常运行,并没有引发 SyntaxError。这种情况下调试排查错误可能很困难。请特别注意字符串的隐式连接。
在 Python 中,我们可以在一行中为多个变量赋值。此外,我们可以简化选择结构,在一行中编写 if-else 语句。两者相遇,可以称为三元运算,是提高代码可读性和简化代码的方法。如果,书写不规范,运行结果可能会让你迷惑。
讯享网
如果条件为 True,会发生什么?
我们试图使用括号来提高可读性。可是实际的结果是,如果条件为 True,则 x 赋值为 (0,1),否则为 “None” 。y 始终赋值为 “None”。如果后者加上括号,得到正确结果。
讯享网
在这种情况下,我更喜欢正常的 if-else 语句,它不太容易出错:
正常情况,元组是使用括号创建。
讯享网
现在创建一个包含一个元素的元组。
我们创建的是一个包含一个元素的元组,却输出三个元素。
说明:如果我们使用括号创建带有一个元素的元组,则不会创建元组,而是创建字符串对象!
在括号内增加一个逗号,用于创建具有一个元素的元组。
讯享网
Python 中的 assert 语句是调试程序的便捷方法。
如果条件为 True,则不会发生任何反应,但如果条件为 False,则会引发断言错误。可以自定义错误消息。
以上示例并没有引发断言错误。
其实,断言语句不应与括号一起使用!否则,整个语句被视为一个整体,非空始终为 True。
讯享网
以上错误可能很明显,但有时我们仍然犯错,列表意想不到的返回 None 值。
你只需要使用这些方法,而无需将其重新赋值给变量。
讯享网
pangram,英语单词,译为“全字母短句”,指包括英语全部26个字母的短句。如果一个字符串至少包含一次英文字母表的所有 26 个字母,则它被认为是一个 pangram。本文列举了几种可以检查给定的字符串是否是 pangram 的方法。

「示例:」
“thequickbrownfoxjumpsoverthelazydog”
最简单的方法是,设置一个包含所有英文字母的字符串。循环遍历需要检测的字符串的每一个字符,使用 lower() 方法将此字符转换为小写。检查此字符是否出现在给定英文字符串中,一旦有字符不存在,则返回 False,否则,返回 True。
使用 set() 函数将字符串转换为集合。如果集合长度等于 26,它是一个 Pangram(英语有 26 个字母)。
讯享网
使用 collections 模块中的 Counter() 函数计算给定字符串中所有字符出现的频率,生成一个字典。计算字典的长度。如果长度是 26,则它是一个 Pangram。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/174015.html