[Python学习日记-37] Python 中的内置函数(下)

[Python学习日记-37] Python 中的内置函数(下)

简介

内置函数详解(O-Z)

简介

          在 Python 中有很多内置函数,例如 len(),这些函数是 Python 解释器自带的,可以直接使用。本篇将介绍 O-Z 的内置函数,下图是官方给出的所有 Python 解释器自带的函数

内置函数官方详解:Built-in Functions — Python 3.12.6 documentation

内置函数详解(O-Z)

一、object()

        object() 用于创建一个基本对象。它是所有其他类的基类,在 Python 中所有的类都是直接或间接地继承自该类。object() 函数创建的对象没有任何属性或方法,它是一个空对象。它通常用作其他类的基类,以便继承一些默认行为和功能。演示代码如下

class MyClass(object):
    pass

my_obj = MyClass()

二、oct()

        oct() 用于将一个整数转换为八进制字符串。它的语法如下

oct(x)

参数:

  • x: 整数

        该函数将会返回对应的八进制表示形式。演示代码如下

num = 10
oct_num = oct(num)
print(oct_num)  # 输出: '0o12'

代码输出如下:

        oct() 函数还可以用于将其他可兼容的数据类型转换为八进制字符串。例如,可以将一个字节字符串转换为八进制表示。演示代码如下

byte_str = b'\x41\x42\x43'
oct_str = oct(int.from_bytes(byte_str, 'big'))
print(oct_str)  # 输出: '0o101103'

代码输出如下:

三、open()

        open() 用于打开文件,在进行文件操作时最为常用。它的语法如下

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数:

  • file:文件路径
  • mode:文件操作模式,有 r、w、a、r+、w+、a+、rb、wb、ab,默认为 r
  • encoding:编码模式,默认为 None,代表使用本机编码
  • errors:错误处理,用于编解码时发生错误时的处理,默认为 None,在字节模式下无法使用

        该函数将会返回一个表示该文件的文件对象。演示代码如下

# 打开文件并写入内容
file = open('example.txt', 'w')
file.write('Hello, World!')
file.close()

# 打开文件并读取内容
file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()

代码输出如下:

        需要注意的是,在打开文件后,应该在不再使用文件时调用 close() 方法来关闭文件,以释放资源,否则知道程序关闭位置都会一直占用资源。

四、ord()

ord() 用于返回表示给定字符的 Unicode 码点。它的语法如下

ord(c)

参数:

  • c:字符,例如'a'、'b'、'!'、'@'、'中'之类的

演示代码如下

print(ord('A'))  # 输出:65
print(ord('a'))  # 输出:97
print(ord('中'))  # 输出:20013

代码输出如下:

        需要注意的是,ord()函数只适用于单个字符。如果输入多个字符则会报 TypeError 错误,如下图所示

        与之相对的是 chr() 函数,它接受一个整数值作为参数,并返回对应的字符。例如,chr(65) 会返回字符 'A'。

五、pow()

        pow() 用于计算指定数的幂。它的语法如下

pow(x, y, mod)

参数:

  • x:底数
  • y:指数
  • mod:可选参数,表示计算结果的模数,默认为 None

        pow() 函数的工作方式有两种不同的形式,如下所示

1、如果提供了两个参数 x 和 y,pow(x, y) 将返回 x 的 y 次幂。演示代码如下

print(pow(2, 3))  # 输出:8

代码输出如下:

2、如果提供了三个参数 x、y 和 mod,pow(x, y, mod) 将返回 x 的 y 次幂对 mod 取模的结果。演示代码如下

print(pow(2, 3, 5))  # 输出:3

代码输出如下:

        需要注意的是,使用 ** 运算符也可以进行幂运算,例如 2** 3 将返回8,与 pow(2, 3) 等效。但是,pow() 函数的优势在于可以提供一个可选的模数参数,并且在某些情况下可以更快地进行计算。

六、print()

print() 用于将指定的内容输出到标准输出设备(通常是控制台)。它的语法如下

print(*objects, sep, end, file, flush)

参数:

  •  *objects:一个或多个要打印的对象,可以是字符串、变量、表达式等
  • sep:要打印的对象之间的分隔符,默认是一个空格
  • end:表示打印结束后要追加的字符,默认是一个换行符 \n
  • file:表示输出的目标文件,默认是标准输出设备
  • flush:表示是否刷新输出缓冲区,默认是 False

演示代码如下

print("Hello, World!")  # 输出:Hello, World!
print(2 + 3)  # 输出:5
print("Hello", "World", sep=", ")  # 输出:Hello, World
print("Hello", end=" ")  # 输出:Hello,后面没有换行
print("World")  # 输出:World,与前面的输出在同一行

msg = "又回到最初的起点"
f = open("tofile.txt","w")
print(msg,"记忆中你青涩的脸",sep="|",end="",file=f)  # 输出:又回到最初的起点|记忆中你青涩的脸 到 tofile.txt 中,并且输出内容后面没有换行

代码输出如下:

        在 Python3 中,print() 函数是一个函数而不是一个语句,这意味着可以将其用作表达式的一部分。

七、property()

        property() 用于创建属性,这些属性可以像访问普通属性一样进行访问,但实际上是通过调用相应的 getter、setter 和 deleter 方法来实现的。它的语法如下

property(fget=None, fset=None, fdel=None, doc=None)

参数:

  • fget:获取属性值的函数
  • fset:设置属性值的函数
  • fdel:删除属性的函数
  • doc:属性的文档字符串

演示代码如下

class Person:
    def __init__(self, name):
        self._name = name
    
    def get_name(self):
        return self._name
    
    def set_name(self, value):
        if isinstance(value, str):
            self._name = value
        else:
            raise TypeError("Name must be a string")
    
    def del_name(self):
        del self._name
    
    name = property(get_name, set_name, del_name, "Person's name")

        在上面的代码中,Person 类定义了一个私有属性 _name,并使用 property() 函数创建了一个名为 name 的属性,该属性可以像访问普通属性一样进行访问。get_name 是获取 name 属性值的函数,set_name 是设置 name 属性值的函数,del_name 是删除 name 属性的函数。当访问 name 属性时,会调用相应的 getter、setter 和 deleter 方法。

        通过 property() 函数创建的属性还可以用作装饰器,以更简洁的方式定义属性。演示代码如下

class Person:
    def __init__(self, name):
        self._name = name
    
    @property
    def name(self):
        return self._name
    
    @name.setter
    def name(self, value):
        if isinstance(value, str):
            self._name = value
        else:
            raise TypeError("Name must be a string")
    
    @name.deleter
    def name(self):
        del self._name

        在上面的代码中,通过将 getter、setter 和 deleter 方法使用 @property、@name.setter 和 @name.deleter 装饰器修饰,实现了与之前示例相同的效果。

八、range()

range() 用于生成一个整数序列。它的语法如下

range(start, stop, step)

参数:

  • start:可选参数,起始值,默认为0
  • stop:结束值
  • step:可选参数,步长,默认为1

        该函数将会返回一个迭代器(iterator),可以使用 list() 函数将其转换为列表,也可以使用 for 循环遍历它。演示代码如下

# 生成一个从0到4的整数序列
print(list(range(5)))  # 输出:[0, 1, 2, 3, 4]

# 生成一个从1到10的整数序列,步长为2
print(list(range(1, 11, 2)))  # 输出:[1, 3, 5, 7, 9]

# 生成一个从10到1的整数序列,步长为-1
print(list(range(10, 0, -1)))  # 输出:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

# 使用for循环遍历一个整数序列
for i in range(3):
    print(i)  # 输出:0, 1, 2

代码输出如下:

九、repr()

        repr() 用于返回一个对象的“官方”字符串表示形式。它的语法如下

repr(object)

参数:

  •  object:要获取其字符串表示形式的对象

        repr() 函数会尝试返回一个能够用来重新创建该对象的字符串。它通常返回一个 Python 表达式,可以通过 eval() 函数进行求值以重新创建该对象。演示代码如下

x = 10
s = repr(x)
print(s,":",type(s))  # 输出:"10"

# 使用eval()函数对repr()返回的字符串进行求值
lst_str = repr([1, 2, 3])
print(lst_str,":",type(lst_str))
new_lst = eval(lst_str)
print(new_lst,":",type(new_lst))  # 输出:[1, 2, 3]

代码输出如下:

        repr() 函数对于调试和开发过程中获取对象的字符串表示非常有用,它提供了一种标准的方式来表示对象,以便于查看其内容和状态。

十、reversed()

        reversed() 用于返回一个反向迭代器。它的语法如下

reversed(seq)

参数:

  • seq: 要进行反向迭代的序列或可迭代对象

        该函数将会返回一个新的反向迭代器对象,该对象可以用于遍历序列或可迭代对象的元素,但是以相反的顺序。演示代码如下

numbers = [1, 2, 3, 4, 5]
reversed_numbers = reversed(numbers)

for num in reversed_numbers:
    print(num)  # 输出:5 4 3 2 1

# 可以将反向迭代器转换为列表
reversed_list = list(reversed(numbers))
print(reversed_list)  # 输出:[5, 4, 3, 2, 1]

# 对字符串进行反向迭代
string = "Hello, World!"
reversed_string = reversed(string)

for char in reversed_string:
    print(char)  # 输出:! d l r o W   , o l l e H

代码输出如下: 

十一、round()

        round() 用于对浮点数进行四舍五入。它的语法如下

round(number, ndigits=None)

参数:

  • number:要进行四舍五入的数值
  • ndigits:可选参数,表示保留的小数位数,默认为None,如果省略 ndigits 参数,则返回最接近的整数

演示代码如下

x = 3.14159
rounded = round(x)
print(rounded)  # 输出:3

y = 4.56789123
rounded_2 = round(y, 2)
print(rounded_2)  # 输出:4.57

z = 2.345
rounded_0 = round(z, 0)
print(rounded_0)  # 输出:2.0

代码输出如下:

十二、set()

        set() 用于创建一个可变的集合对象。它的语法如下

set(iterable)

参数:

  • iterable:可选参数,表示一个可迭代的对象,如列表、元组、字符串等。如果省略iterable参数,则创建一个空的集合

演示代码如下

numbers = [1, 2, 3, 4, 4, 5, 5]
numbers_set = set(numbers)
print(numbers_set)  # 输出:{1, 2, 3, 4, 5}

string = "hello"
string_set = set(string)
print(string_set)  # 输出:{'e', 'h', 'o', 'l'}

代码输出如下:

十三、setattr()

        setattr() 用于动态设置对象的属性。它的语法如下

setattr(obj, name, value)

参数:

  • obj:要设置属性的对象
  • name:属性的名称
  • value:要设置的属性值

        该函数会将对象 obj 的属性 name 设置为值 value。如果属性已经存在,那么该属性的值会被替换;如果属性不存在,那么将会创建一个新的属性,并将其设置为指定的值。演示代码如下

class Person:
    pass

person = Person()  # 创建一个Person对象

setattr(person, 'name', 'John')  # 设置person对象的name属性为'John'
setattr(person, 'age', 25)  # 设置person对象的age属性为25

print(person.name)  # 输出:John
print(person.age)  # 输出:25

代码输出如下:

        需要注意的是,setattr() 函数是一个通用函数,可以用于任意对象的属性设置,不仅限于类的实例对象。

十四、slice()

        slice() 用于创建切片对象。切片对象可以用于对序列(例如字符串、列表、元组等)进行切片操。它的语法如下

slice(start, stop, step)

参数:

  • start:表示起始位置,默认为0
  • stop:表示终止位置
  • step:表示步长,默认为1

        该函数将会返回一个切片对象,该对象可以传递给序列对象的切片操作符[],从而实现对序列的切片操作。演示代码如下

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 使用切片对象对列表进行切片操作
s = slice(2, 7, 2)  # 与 numbers[2:7:2] 相同
result = numbers[s]
print(result)  # 输出:[3, 5, 7]

代码输出如下: 

十五、sorted()

        sorted() 用于对可迭代对象进行排序操作。它的语法如下

sorted(iterable, key=None, reverse=False)

参数:

  • iterable:表示要排序的可迭代对象,例如列表、元组等
  • key:可选参数,用于指定一个函数,该函数将作用于每个元素,并根据返回值进行排序,默认为None
  • reverse:可选参数,用于指定排序顺序,默认为 False(升序),如果设置为 True,则会按照降序进行排序

        该函数将会返回一个新的已排序的列表,并且不会修改原始的可迭代对象。演示代码如下

numbers = [5, 2, 8, 1, 6, 9, 3]

# 对列表进行升序排序
result = sorted(numbers)
print(result)  # 输出:[1, 2, 3, 5, 6, 8, 9]

# 对列表进行降序排序
result_reverse = sorted(numbers, reverse=True)
print(result_reverse)  # 输出:[9, 8, 6, 5, 3, 2, 1]

代码输出如下:

十六、staticmethod()

        staticmethod() 用于将一个方法转换为静态方法。静态方法是属于类的方法,与类的实例无关,可以直接通过类名进行调用,而不需要创建类的实例。它的语法如下

staticmethod(function)

参数:

  • function: 要转换为静态方法的函数或方法

演示代码如下

class MyClass:
    def __init__(self, name):
        self.name = name
    
    @staticmethod
    def static_method():
        print("This is a static method.")
    
    def instance_method(self):
        print("This is an instance method. My name is", self.name)

# 调用静态方法
MyClass.static_method()  # 输出:This is a static method.

# 创建类的实例并调用实例方法
my_instance = MyClass("John")
my_instance.instance_method()  # 输出:This is an instance method. My name is John

代码输出如下:

十七、str()

        str() 用于将一个对象转换为字符串表示形式。它的语法如下

str(object)

参数:

  • object: 要转换为字符串的对象

演示代码如下

number = 123
string = str(number)
print(string)  # 输出: "123"
print(type(string))  # 输出: <class 'str'>

boolean = True
string = str(boolean)
print(string)  # 输出: "True"
print(type(string))  # 输出: <class 'str'>

lst = [1, 2, 3]
string = str(lst)
print(string)  # 输出: "[1, 2, 3]"
print(type(string))  # 输出: <class 'str'>

dict_obj = {"name": "John", "age": 30}
string = str(dict_obj)
print(string)  # 输出: "{'name': 'John', 'age': 30}"
print(type(string))  # 输出: <class 'str'>

代码输出如下:

十八、sum()

        sum() 用于计算可迭代对象中元素的总和。它的语法如下

sum(iterable, start)

参数:

  • iterable:表示可迭代对象,如列表、元组或集合等
  • start:可选参数,表示起始值,默认为0

演示代码如下

numbers = [1, 2, 3, 4, 5]
total = sum(numbers)
print(total)  # 输出: 15

numbers = [1.5, 2.5, 3.5]
total = sum(numbers)
print(total)  # 输出: 7.5

numbers = (1, 2, 3)
total = sum(numbers)
print(total)  # 输出: 6

numbers = {1, 2, 3, 4, 5}
total = sum(numbers)
print(total)  # 输出: 15

numbers = [1, 2, 3, 4, 5]
total = sum(numbers, 10)  # 指定起始值为10
print(total)  # 输出: 25

代码输出如下:

十九、super()

        super() 用于调用父类的方法。它常常在子类的方法内部使用,以便在子类中扩展或重写父类的功能,同时保留父类的行为。它的语法如下

super(type, object_or_type)

参数:

  • type:类对象
  • object_or_type:类对象或对象实例

演示代码如下

class Parent:
    def __init__(self, name):
        self.name = name
        
    def greet(self):
        print(f"Hello, {self.name}!")

class Child(Parent):
    def __init__(self, name, age):
        super().__init__(name)  # 调用父类的__init__方法
        self.age = age
    
    def greet(self):
        super().greet()  # 调用父类的greet方法
        print(f"I am {self.age} years old.")

child = Child("Jove", 10)
child.greet()

代码输出如下:

二十、tuple()

        tuple() 用于创建元组(tuple)。它的语法如下

tuple(iterable)

参数:

  • iterable:可迭代对象,如列表、字符串、字典等

演示代码如下

# 创建一个空元组
empty_tuple = tuple()
print(empty_tuple)  # ()

# 创建一个包含多个元素的元组
numbers_tuple = tuple([1, 2, 3, 4, 5])
print(numbers_tuple)  # (1, 2, 3, 4, 5)

# 通过字符串创建元组
string_tuple = tuple("Hello")
print(string_tuple)  # ('H', 'e', 'l', 'l', 'o')

# 将字典转换为元组
dict_tuple = tuple({"name": "Alice", "age": 20})
print(dict_tuple)  # ('name', 'age')

# 在元组中包含其他元组
nested_tuple = (("a", "b"), (1, 2, 3), ("x", "y", "z"))
print(nested_tuple)  # (('a', 'b'), (1, 2, 3), ('x', 'y', 'z'))

代码输出如下:

二十一、type()

        type() 用于获取一个对象的类型。它的语法如下

type(object)

参数:

  • object:要获取类型的对象

演示代码如下

# 获取整数的类型
num = 10
print(type(num))  # <class 'int'>

# 获取浮点数的类型
pi = 3.14
print(type(pi))  # <class 'float'>

# 获取字符串的类型
message = "Hello, World!"
print(type(message))  # <class 'str'>

# 获取列表的类型
numbers = [1, 2, 3, 4, 5]
print(type(numbers))  # <class 'list'>

# 获取字典的类型
person = {"name": "Alice", "age": 20}
print(type(person))  # <class 'dict'>

# 获取函数的类型
def say_hello():
    print("Hello!")

print(type(say_hello))  # <class 'function'>

代码输出如下:

        该函数能够帮助我们了解对象的类型,以正确地处理和操作对象。

二十二、vars()

        vars() 用于返回对象的 __dict__ 属性。它的语法如下

vars(object)

参数:

  • object: 要获取属性的对象

        该函数对于普通的对象,vars() 返回对象的属性和属性值的字典。对于模块、类和实例,vars() 返回它们的名称空间,如果没有提供object参数,则vars()返回当前作用域的名称空间。下演示代码如下

# 获取当前作用域的名称空间
print(vars())  # 返回当前作用域的名称空间的字典

# 获取模块的名称空间
import math
print(vars(math))  # 返回math模块的名称空间的字典

# 获取类的名称空间
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

p = Person("Alice", 20)
print(vars(Person))  # 返回Person类的名称空间的字典

# 获取实例的属性字典
print(vars(p))  # 返回实例p的属性字典

代码输出如下:

        需要注意的是,vars() 仅适用于具有 __dict__ 属性的对象。如果对象没有 __dict__ 属性,调用 vars() 会引发 TypeError 异常。

二十三、zip()

        zip() 用于将一系列可迭代对象(例如列表、元组或字符串)作为参数,返回一个由元组组成的迭代器,其中的每个元组包含源可迭代对象中相同位置的元素。它的语法如下

zip(*iterables)

参数:

  • *iterables:一个或多个可迭代对象

        该函数可以传递多个可迭代对象作为参数,将它们的对应元素打包成元组(以短的为准)。将会返回一个迭代器,每次迭代都会返回一个元组,其中的元素分别来自于每个可迭代对象相同位置的元素。当最短的可迭代对象被遍历完时,迭代将停止,超出部分将会被忽略。演示代码如下

# 将两个列表打包成元组
letters = ['a', 'b', 'c', 'd']
numbers = [1, 2, 3, 4]
result = zip(letters, numbers)  # 返回一个迭代器

# 遍历迭代器并打印每个元组
for item in result:
    print(item)  # 打印每个元组

# 将多个列表打包成元组
names = ['Jove', 'Bob', 'Charlie']
ages = [25, 30, 35]
countries = ['USA', 'Canada', 'UK']
result = zip(names, ages, countries)  # 返回一个迭代器

# 将元组解压缩为单独的列表
unzipped = zip(*result)  # 对迭代器中的每个元组进行解压缩
name_list, age_list, country_list = list(unzipped)  # 将解压后的元组分别赋值给不同的列表

print(name_list)  # 打印姓名列表
print(age_list)  # 打印年龄列表
print(country_list)  # 打印国家列表

代码输出如下:

        zip() 函数返回的是一个迭代器,如果需要重复使用结果,建议将返回值转换为列表或其他可迭代对象保存起来。

二十四、__import__()

        __import__() 用于动态地导入模块。它的语法如下

__import__(name, globals=None, locals=None, fromlist=(), level=0)

参数:

  • name:要导入的模块名,可以是一个字符串
  • globals:可选参数,用于指定模块的全局命名空间
  • locals:可选参数,用于指定模块的局部命名空间
  • fromlist:可选参数,用于指定要从模块中导入的对象,可以是一个列表或元组
  • level:输入的是整数,用于指定相对导入时的层级

该函数会根据给定的模块名,动态地导入相应的模块,并返回导入的模块对象。如果模块不存在,则会抛出ImportError异常。演示代码如下

# 导入内置模块
math_module = __import__('math')
print(math_module.pi)  # 打印数学模块中的π值

# 导入自定义模块
my_module = __import__('my_module')
my_module.my_function()  # 调用自定义模块中的函数

# 导入模块的某个对象
random_module = __import__('random', fromlist=['randrange'])
random_number = random_module.randrange(1, 10)
print(random_number)  # 打印随机数

# 导入相对路径的模块
relative_module = __import__('..my_module', fromlist=['my_function'], level=1)
relative_module.my_function()  # 调用相对路径模块中的函数

        在上面的代码中,我们使用 __import__() 函数动态地导入模块,并使用导入的模块对象进行相应的操作。我们可以导入内置模块、自定义模块,以及导入模块的特定对象。还可以通过 fromlist 参数指定要从模块中导入的对象,以及通过 level 参数指定相对导入的层级。

        需要注意的是,虽然可以使用 __import__() 函数动态导入模块,但通常更推荐使用 import 语句来导入模块。__import__() 函数主要在特定的动态导入场景中使用,例如根据用户输入或配置文件中的动态模块名进行导入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JoveZou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值