Python 格式化字符串传值问题(format() 与 %s)

目录

# 1. 引言

# 2. %s

# 3. str.format()

## 3.1 位置参数

## 3.2 关键字参数

## 3.3 通过对象


# 1. 引言

        官方建议,格式化字符串时使用"format"代替使用"%",因为可读性更强;但是为了读懂源码,我们需要两者都学会才行

# 2. %s

Python 格式化字符串传值问题(format() 与 %s)

        一般为 2 种形式,第一种多个格式化字符串需要传值的时候是按照前后顺序来传值的,这就带来一个问题:数量多了以后,很难清楚哪一个占位符对应哪一个实参.
        因此参数较多的情况下,我们用字典赋值,%(name)s 对应 {"name":"LIUYU"}.
        但是此种形式,需要先验知识背书,即你知道%s这个奇形怪状的东西是什么,可读性也不是很好,于是有了str.format().

# 3. str.format()

print("hello.My name is {name}, I'm from {nationality}".format(name='LIUYU',nationality='China'))

         可以说,str.format() 是Python最为推荐的字符串格式化方法

## 3.1 位置参数

print("{},{}".format('LIUYU','China'))
print("{1},{0},{1}".format('LIUYU','China'))
li = ['LIUYU','China']
print("{},{}".format(*li))

LIUYU,China
China,LIUYU,China
LIUYU,China

         注意,传入列表是用*,若是不用*,则会把li当成一个列表去处理,即0表示li是format里的下标为0的参数,而这个参数是个列表,可以[0],尊重数据结构了属于是.

print('name is {0[0]} age is {0[1]}').format(li)
# output: name is LIUYU age is 20

## 3.2 关键字参数

print("hello.My name is {name}, I'm from {nationality}".format(name='LIUYU',nationality='China'))

dict = {'name':'LIUYU','nationality':'China'}
print("{name},{nationality}".format(**dict))

         注意,传入字典是用**,如果不用的话,应该也要尊重一波数据结构:

dict = {'name':'LIUYU','nationality':'China'}
print("{0[name]},{0[nationality]}".format(dict))

# output: LIUYU,China

## 3.3 通过对象

class Person:
    def __init__(self, name, age):
        self.name, self.age = name, age

    def __str__(self):
        return 'This guy is {self.name},who is {self.age} years old.'.format(self=self)

print(Person('LIUYU', 20))

# output: This guy is LIUYU,who is 20 years old.

参考文章

  1.  Python模块的使用-- pymysql通过字典插入数据_范翻番樊的博客-CSDN博客
  2.  Python 函数参数前面一个星号(*)和两个星号(**)的区别 | 菜鸟教程
  3. Python3 MySQL 数据库连接 – PyMySQL 驱动 | 菜鸟教程
  4.  python中将字典作为参数传入函数_single-tracking的博客-CSDN博客_python传入字典参数
上一篇:pacman一键更换国内源


下一篇:Flutter Engage China 开发者常见问题解答 | 上篇