当前位置:首页>python>Python 内置函数系列:p开头系列函数

Python 内置函数系列:p开头系列函数

  • 2026-10-02 18:41:46
Python 内置函数系列:p开头系列函数

pow():数学计算的"加速器"

1. 基础用法:高效幂运算与取模

pow()函数用于计算幂运算,支持三参数形式进行高效的取模计算。

# 基本幂运算
print
(f"2的3次方: {pow(2, 3)}")        # 输出: 8
print
(f"10的-2次方: {pow(10, -2)}")   # 输出: 0.01
print
(f"5的0次方: {pow(5, 0)}")       # 输出: 1

# 使用取模运算(更高效 than pow(base, exp) % mod)

print
(f"2^10 mod 100: {pow(2, 10, 100)}")  # 输出: 24
print
(f"3^7 mod 13: {pow(3, 7, 13)}")      # 输出: 3

# 等价运算符对比

base, exp, mod = 2, 10, 100
print
(f"pow()方式: {pow(base, exp, mod)}")
print
(f"传统方式: {base ** exp % mod}")     # 效率较低

# 复数结果

print
(f"负数的分数次幂: {pow(-9, 0.5)}")   # 输出: (1.8369701987210297e-16+3j)

2. 实际应用:加密算法和数学计算

class MathUtils:
    @staticmethod

    def
 modular_exponentiation(base, exponent, modulus):
        """模幂运算(加密算法常用)"""

        if
 modulus == 1:
            return
 0
        return
 pow(base, exponent, modulus)

    @staticmethod

    def
 fast_power_sequence(n, modulus=None):
        """快速生成幂序列"""

        if
 modulus:
            return
 [pow(2, i, modulus) for i in range(n)]
        else
:
            return
 [pow(2, i) for i in range(n)]

    @staticmethod

    def
 calculate_compound_interest(principal, rate, periods):
        """计算复利"""

        return
 principal * pow(1 + rate, periods)

    @staticmethod

    def
 modular_inverse(a, modulus):
        """计算模逆元(数论重要概念)"""

        # 使用 pow(a, -1, modulus) 计算a在模modulus下的逆元

        try
:
            return
 pow(a, -1, modulus)
        except
 ValueError as e:
            return
 f"计算失败: {e}"

# 使用示例

math_utils = MathUtils()

# 加密计算示例(RSA基础)

print
("=== 加密算法示例 ===")
message = 65  # 原始消息
public_key = (17, 3233)  # (e, n)
encrypted = math_utils.modular_exponentiation(message, public_key[0], public_key[1])
print
(f"加密结果: {encrypted}")

# 快速幂序列

power_seq = math_utils.fast_power_sequence(5, 100)
print
(f"2的幂序列模100: {power_seq}")

# 复利计算

investment = 1000  # 本金
annual_rate = 0.05  # 年利率
years = 10
future_value = math_utils.calculate_compound_interest(investment, annual_rate, years)
print
(f"投资未来价值: {future_value:.2f}")

# 模逆元计算

print
(f"38在模97下的逆元: {math_utils.modular_inverse(38, 97)}")
# 验证: 23 * 38 % 97 = 1

print
(f"验证: {23 * 38 % 97 == 1}")

print():输出控制的"万能打印机"

1. 基础用法:灵活控制输出格式

print()函数是Python中最常用的输出工具,支持丰富的格式化选项。

# 基本输出
print
("Hello, World!")  # 输出: Hello, World!

# 多参数输出

name = "Alice"
age = 25
print
("姓名:", name, "年龄:", age)  # 默认空格分隔

# 自定义分隔符

print
("2023", "10", "15", sep="-")  # 输出: 2023-10-15

# 自定义结束符

print
("开始执行...", end="")
print
("完成!")  # 输出: 开始执行...完成!

# 输出到文件

with
 open("output.txt", "w") as f:
    print
("这是文件内容", file=f)

# 强制刷新缓冲区

import
 time
print
("正在处理...", end="", flush=True)
time.sleep(2)
print
("完成!")

2. 实际应用:高级日志和进度显示

class AdvancedPrinter:
    def
 __init__(self, timestamp=False, level_prefix="", file=None):
        self
.timestamp = timestamp
        self
.level_prefix = level_prefix
        self
.file = file

    def
 log(self, *args, **kwargs):
        """带格式的日志输出"""

        import
 datetime

        parts = []
        if
 self.timestamp:
            parts.append(f"[{datetime.datetime.now().strftime('%H:%M:%S')}]")
        if
 self.level_prefix:
            parts.append(f"[{self.level_prefix}]")

        # 构建输出内容

        content = " ".join(str(arg) for arg in args)
        if
 parts:
            print
(" ".join(parts), content, file=self.file, **kwargs)
        else
:
            print
(content, file=self.file, **kwargs)

    def
 progress_bar(self, current, total, length=50):
        """显示进度条"""

        percent = current / total
        filled_length = int(length * percent)
        bar = "█" * filled_length + "─" * (length - filled_length)
        print
(f"\r[{bar}] {percent:.1%}", end="", flush=True)
        if
 current == total:
            print
()  # 完成后换行

    def
 table_print(self, data, headers=None):
        """表格形式输出"""

        if
 not data:
            return


        # 自动检测列宽

        if
 headers:
            all_data = [headers] + data
        else
:
            all_data = data

        # 计算每列最大宽度

        col_widths = []
        for
 i in range(len(all_data[0])):
            col_width = max(len(str(row[i])) for row in all_data)
            col_widths.append(col_width)

        # 打印表头

        if
 headers:
            header_line = " | ".join(f"{header:<{width}}" for header, width in zip(headers, col_widths))
            print
(header_line)
            print
("-" * len(header_line))

        # 打印数据行

        for
 row in data:
            row_line = " | ".join(f"{str(item):<{width}}" for item, width in zip(row, col_widths))
            print
(row_line)

# 使用示例

printer = AdvancedPrinter(timestamp=True, level_prefix="INFO")

# 日志输出

printer.log("应用程序启动")
printer.log("加载配置文件", "config.ini")

# 进度条演示

print
("进度条演示:")
total = 100
for
 i in range(total + 1):
    printer.progress_bar(i, total)
    import
 time
    time.sleep(0.02)  # 模拟处理时间

# 表格输出

data = [
    ["Alice", 25, "Engineer"],
    ["Bob", 30, "Designer"],
    ["Charlie", 35, "Manager"]
]
headers = ["姓名", "年龄", "职位"]
print
("\n员工信息表:")
printer.table_print(data, headers)

property:属性管理的"智能网关"

1. 基础用法:创建托管属性

property类用于创建托管属性,实现getter、setter和deleter方法。

# 基础property使用
class
 Temperature:
    def
 __init__(self):
        self
._celsius = 0

    def
 get_celsius(self):
        """获取摄氏度"""

        return
 self._celsius

    def
 set_celsius(self, value):
        """设置摄氏度(带验证)"""

        if
 value < -273.15:
            raise
 ValueError("温度不能低于绝对零度")
        self
._celsius = value

    def
 del_celsius(self):
        """删除温度值"""

        print
("删除温度值")
        del
 self._celsius

    # 创建property属性

    celsius = property(get_celsius, set_celsius, del_celsius, "温度属性")

# 使用示例

temp = Temperature()
temp.celsius = 25  # 调用set_celsius
print
(f"当前温度: {temp.celsius}°C")  # 调用get_celsius

try
:
    temp.celsius = -300  # 会触发验证错误
except
 ValueError as e:
    print
(f"错误: {e}")

# 查看文档字符串

print
(f"属性文档: {Temperature.celsius.__doc__}")

2. 实际应用:数据验证和属性装饰器

class Person:
    def
 __init__(self, name, age):
        self
._name = name
        self
._age = age
        self
._email = None

    @property

    def
 name(self):
        """姓名属性(只读)"""

        return
 self._name.title()  # 返回格式化名称

    @property

    def
 age(self):
        """年龄属性"""

        return
 self._age

    @age.setter

    def
 age(self, value):
        """年龄设置器(带验证)"""

        if
 not isinstance(value, int):
            raise
 TypeError("年龄必须是整数")
        if
 value < 0 or value > 150:
            raise
 ValueError("年龄必须在0-150之间")
        self
._age = value

    @property

    def
 email(self):
        """邮箱属性"""

        return
 self._email

    @email.setter

    def
 email(self, value):
        """邮箱设置器(带格式验证)"""

        import
 re
        if
 not re.match(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', value):
            raise
 ValueError("邮箱格式不正确")
        self
._email = value

    @email.deleter

    def
 email(self):
        """邮箱删除器"""

        print
("清空邮箱地址")
        self
._email = None

    @property

    def
 is_adult(self):
        """计算属性:是否成年"""

        return
 self._age >= 18

    def
 __repr__(self):
        return
 f"Person(name='{self.name}', age={self.age})"

# 使用示例

print
("=== 属性管理示例 ===")
person = Person("alice smith", 25)

# 使用属性

print
(f"姓名: {person.name}")  # 自动调用getter,输出: Alice Smith
print
(f"年龄: {person.age}")
print
(f"是否成年: {person.is_adult}")

# 设置属性

person.age = 30  # 调用setter,通过验证
person.email = "alice@example.com"  # 调用setter,通过验证
print
(f"邮箱: {person.email}")

# 属性验证测试

try
:
    person.age = 200  # 会触发验证错误
except
 ValueError as e:
    print
(f"年龄设置错误: {e}")

try
:
    person.email = "invalid-email"  # 会触发验证错误
except
 ValueError as e:
    print
(f"邮箱设置错误: {e}")

# 删除属性

del
 person.email  # 调用deleter
print
(f"删除后邮箱: {person.email}")

总结

通过本文的详细解析,我们深入了解了Python中三个重要的内置功能:

  1. 1. pow(base, exp, mod) - 数学计算的加速器,加密算法、数论计算、性能优化
  2. 2. print(*objects, sep, end, file, flush) - 输出控制的万能打印机,调试输出、日志记录、进度显示
  3. 3. property(fget, fset, fdel, doc) - 属性管理的智能网关,数据验证、计算属性、API设计

版本兼容性提醒:

  • • Python 3.8+:pow()支持负指数和关键字参数
  • • Python 3.3+:print()新增flush参数
  • • Python 3.5+:property的文档字符串可写
  • • Python 3.13+:property新增__name__属性

阅读推荐:

Python 内置函数系列:o开头系列函数

Python 内置函数系列:n开头系列函数

Python 内置函数系列:m开头系列函数


✨关注我,获取更多Python学习资源、实战项目和行业动态!在公众号后台回复"python学习",获取Python学习电子书籍!

最新文章

随机文章