Python3 str.format动态参数业务场景应用

动态参数核心
list_01 = ['code:H;', 'number:h;', 'separator:*;', 'number:b;']
my_name = '{}{}{}{}'.format(*list_01) 
#此时list_01中的元素会依次传入到{}
print(my_name) # 输出结果
业务应用
  • 原始字符串

    old_str = 'Hh*b*tw*t1*t2'
    
  • 替换规则

    rules = {'code': ['H'], 'number': ['h', 'b', 'tw', 't1', 't2'], 'separator': ['*', '(', ')', '/', '+', '~']}
    
  • 预期结果

    new_str = 'code:H;number:h;separator:*;number:b;separator:*;number:tw;separator:*;number:t1;separator:*;number:t2'
    
  • 业务实现

    def str_replace(old_str:str, rules: dict):
        '''字符替换'''
        new_str = old_str
        idx_values = {}
        for key, old_values in rules.items():
            for value in old_values:
                if value in new_str:
                    idxs = find_all(value, old_str)
                    for idx in idxs:
                        idx_values[idx] = '{}:{};'.format(key, value)
                    new_str = new_str.replace(value, '{}')
        values = []
        keys = list(idx_values.keys())
        keys.sort()
        for idx in keys:
            values.append(idx_values[idx])
        new_str = new_str.format(*values).rstrip(';')
        return new_str
    
总结
  • 如果直接使用str.replace方法,则替换后number中的b继续参与替换,与预期效果不符。
<think>嗯,用户想要了解Pythonstr.format的使用方法。首先,我得回忆一下自己学过的相关知识。记得str.formatPython中用来格式化字符串的一种方法,比旧的%操作符更灵活。应该从基本用法开始讲,然后逐步深入高级功能。 首先,得解释基本替换,也就是用{}作为占位符,然后按顺序替换参数。比如"{} {}".format("Hello", "World")会变成"Hello World"。这部分可能用户已经知道,但作为基础还是得提一下。 然后是位置参数,可以通过索引指定替换的位置,比如{0}和{1},这样可以重复使用参数,或者改变顺序。例如"{1} {0}".format("World", "Hello")会得到"Hello World"。这一点对于调整顺序很有用。 接下来是关键字参数,使用变量名来替换,比如"{name} is {age} years old".format(name="Alice", age=30)。这样可读性更好,尤其是参数多的时候。 混合使用位置和关键字参数的话,需要注意位置参数必须在关键字参数之前,否则会报错。这点需要提醒用户注意。 然后是格式规范,比如控制数字的小数位数、填充对齐、进制转换等。例如"{:.2f}".format(3.1415)会保留两位小数。这部分可能比较复杂,但很实用,用户可能需要具体的例子来理解。 还有格式化符号,比如对齐(^、<、>)、填充字符、千位分隔符等。比如"{:*^10}".format("hi")会用*填充,让字符串居中,总长度10。这类例子能帮助用户直观看到效果。 另外,访问对象的属性和字典键值,比如对于对象,可以用"{0.name}".format(obj),字典的话可以用"{"name"} is {age}".format(**dict)。这部分可能需要用户有一定的面向对象基础,但如果有相关需求的话,会很有用。 最后,可能还要提到Python 3.6之后的f-string,虽然用户问的是str.format,但简单对比一下,让用户知道有更简洁的方式存在,也是好的。 需要注意用户可能的疑问点,比如当大括号需要转义的时候,应该用双大括号{{}}来表示。还有如果参数个数不匹配会报错,需要确保参数正确。 总结的时候要分点说明,结构清晰,举足够的例子,让用户能跟着例子动手尝试。可能用户是刚开始学习Python,所以需要避免太深入的细节,但又要覆盖常用的功能。确保解释准确,没有错误,同时语言要口语化,不用太正式。</think>`str.format()` 是 Python 中用于字符串格式化的核心方法,它通过 `{}` 占位符和灵活的参数传递,将变量插入到字符串中。以下是常见用法和示例: --- ### **1. 基础用法** - **替换字段**:用 `{}` 作为占位符,按顺序替换参数。 ```python print("{} 的年龄是 {}".format("小明", 18)) # 输出:小明 的年龄是 18 ``` --- ### **2. 位置参数** - 通过索引指定参数位置(索引从 0 开始)。 ```python print("{1} 看到了 {0}".format("猫", "小明")) # 输出:小明 看到了 猫 # 重复使用参数 print("{0} 喜欢 {1},但 {0} 讨厌 {2}".format("小红", "苹果", "香蕉")) # 输出:小红 喜欢 苹果,但 小红 讨厌 香蕉 ``` --- ### **3. 关键字参数** - 用变量名作为占位符,提高可读性。 ```python print("{name} 在 {city} 工作".format(name="张三", city="北京")) # 输出:张三 在 北京 工作 ``` --- ### **4. 混合位置和关键字参数** - 位置参数必须在前,关键字参数在后。 ```python print("{0} 买了 {fruit} 和 {drink}".format("李四", fruit="苹果", drink="牛奶")) # 输出:李四 买了 苹果 和 牛奶 ``` --- ### **5. 格式规范(Format Specification)** - 控制数字、对齐、填充等格式,语法为 `{[参数]:格式}`。 #### **数字格式化** ```python print("圆周率: {:.2f}".format(3.14159)) # 保留两位小数 → 3.14 print("十六进制: {:x}".format(255)) # 转换为十六进制 → ff print("百分比: {:.1%}".format(0.25)) # 百分比格式 → 25.0% ``` #### **对齐与填充** ```python print("{:*^10}".format("HI")) # 居中,宽度10,填充* → ***HI**** print("{:<10}".format("左对齐")) # 左对齐,宽度10 → 左对齐 print("{:>10}".format("右对齐")) # 右对齐,宽度10 → 右对齐 ``` #### **其他格式** ```python print("{:,}".format(1000000)) # 千位分隔符 → 1,000,000 print("{:+} {}".format(5, -3)) # 显示符号 → +5 -3 ``` --- ### **6. 高级用法** - **访问对象属性或字典键值**: ```python class Person: def __init__(self, name, age): self.name = name self.age = age p = Person("王五", 25) print("姓名: {p.name}, 年龄: {p.age}".format(p=p)) # 输出:姓名: 王五, 年龄: 25 # 字典解包 data = {"name": "赵六", "score": 95} print("学生: {name}, 分数: {score}".format(**data)) # 输出:学生: 赵六, 分数: 95 ``` - **格式化列表/元组**: ```python nums = [10, 20, 30] print("第二个数是: {0[1]}".format(nums)) # 输出:第二个数是: 20 ``` --- ### **7. 转义大括号** - 用双大括号 `{{` 和 `}}` 表示字面量的大括号。 ```python print("这是一个 {{占位符}}") # 输出:这是一个 {占位符} ``` --- ### **总结** `str.format()` 提供了高度灵活的字符串格式化方式,结合位置、关键字参数和格式规范,能满足大多数场景需求。对于 Python 3.6+ 用户,还可以尝试更简洁的 [f-strings](https://docs.python.org/3/tutorial/inputoutput.html#formatted-string-literals)(如 `f"{name} is {age} years old"`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值