方法一:也是 比较好用的,功能教齐全

s="{name} is {sex}"
print(s.format(name="zzy",sex="girl")) # zzy is girl
如果要被替换的变量能在变量域中找到, 那么你可以结合使用 format_map() 和 vars()
vars()找到所有局部变量
name="zxc"
sex="boy"
print(s.format_map(vars())) # zxc is boy
vars() 还有一个有意思的特性就是它也适用于对象实例。
class Info:
def __init__(self,name,sex):
self.name=name
self.sex=sex a=Info("zzz","beautiful")
print(s.format_map(vars(a))) # zzz is beautiful

缺陷:format 和 format_map() 的一个缺陷就是它们并不能很好的处理变量缺失的情况

s = "{name} is {sex}"
print(s.format(name='Guido'))
报错:
"""
Traceback (most recent call last):
File "/home/zzy/PycharmProjects/MyTest/littleTest.py", line 301, in <module>
print(s.format(name='Guido'))
KeyError: 'sex'
"""

解决:

我们把参数sex 手动清除

s = "{name} is {sex}"
name = "zxc"
class safesub(dict):
"""防止key找不到""" def __missing__(self, key):
return '{' + key + '}' print(s.format_map(safesub(vars()))) # zxc is {sex}
# 映射或者字典类中鲜为人知的 __missing__() 方法可以让你定义如何处理缺失的值。 在 SafeSub 类中,这个方法被定义为对缺失的值返回一个占位符。 你可以发现缺失的值会出现在结果字符串中(在调试的时候可能很有用),而不是产生一个 KeyError 异常
如果你发现自己在代码中频繁的执行这些步骤,你可以将变量替换步骤用一个工具函数封装起来。就像下面这样:
import sys

def sub(text):
return text.format_map(safesub(sys._getframe(1).f_locals)) print(sys._getframe().f_locals)
print(sub(s)) # zxc is {sex} #注释:1:,sub() 函数使用 sys._getframe(1) 返回调用者的栈帧。可以从中访问属性 f_locals 来获得局部变量

方法二: 实现功能的还有一种方法,就是模板字符串,但是教之format_map var 就low一些了,,也是没法处理变量缺失问题使用 format() 方法还有一个好处就是你可以获得对字符串格式化的所有支持(对齐,填充,数字格式化等待)

import string
n=24
s = string.Template('$name has $n messages.')
print(s.substitute(vars())) # zxc has 24 messages.
 

python之字符串中插入变量的更多相关文章

  1. php基础10:字符串中插入变量

    <?php //插入字符串 //1.双引号可以解析字符串中的变量:但是前后不能跟中文符号 $username = "gaoxiong"; echo "my name ...

  2. python字符串中插入变量

  3. python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字

    python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...

  4. PHP字符串中的变量解析(+教你如何在PHP字符串中加入变量)

    定义字符串的时候,用单引号或者双引号都是可以的.我个人习惯是用双引号.在输出字符串的时候,若字符串中含有字符串变量,使用单引号和双引号则是有区别的.如下面程序: 1 2 3 4 5 6 7 8 < ...

  5. C++ 在字符串中插入子串+推断字符串是否由空格组成

    // Example3.cpp : 定义控制台应用程序的入口点. #include "StdAfx.h" #include <string> #include < ...

  6. python之字符串中有关%d,%2d,%02d的问题

    python之字符串中有关%d,%2d,%02d的问题 在python中,通过使用%,实现格式化字符串的目的.(这与c语言一致) 其中,在格式化整数和浮点数时可以指定是否补0和整数与小数的位数. 首先 ...

  7. PHP 自定义字符串中的变量名解析

    PHP 自定义字符串中的变量名解析   这样一个需求:页面的 title 可以在后台自定义,自定义内容中可能包含变量,变量用 {$var} 表示, 其中 $var 为变量名 将 title 字段存入数 ...

  8. python 判断字符串中是否只有中文字符

    python 判断字符串中是否只有中文字符 学习了:https://segmentfault.com/q/1010000007898150 def is_all_zh(s): for c in s: ...

  9. python判断字符串中是否包含子字符串

    python判断字符串中是否包含子字符串 s = '1234问沃尔沃434' if s.find('沃尔沃') != -1:     print('存在') else:     print('不存在' ...

随机推荐

  1. React 全新的 Context API

    Context API 可以说是 React 中最有趣的一个特性了.一方面很多流行的框架(例如react-redux.mobx-react.react-router等)都在使用它:另一方面官方文档中却 ...

  2. GitHub区域和工作流程

    workspace:工作区 index:暂存区 repository:本地版本库 remote:远程仓库 首先到托管服务器上创建一个空版本库,例如在github.coding.oschina等 然后克 ...

  3. elementui中table组件表头和内容不对齐的问题

    表头与内容没对齐 在样式里加入 .el-table th.gutter{ display: table-cell!important; } 终于舒服了

  4. windows10 配置SSH连接Github、配置SSH Key

    由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要设置SSH key. 第1步:创建SSH Key.在用户主目录下[我的电脑是C:\Users\ad],看看有没有.ssh ...

  5. js instanceof和typeof的区别及简单用法

    js中判断一个变量的类型,通常的做法是用typeof方法,看它返回的是 什么,但是对于数组和对象它返回的都是object,ECMAScript引入了java中的instanceof 方法来弥补这一缺陷 ...

  6. 工程师技术(五):Shell脚本的编写及测试、重定向输出的应用、使用特殊变量、编写一个判断脚本、编写一个批量添加用户脚本

    一.Shell脚本的编写及测 目标: 本例要求两个简单的Shell脚本程序,任务目标如下: 1> 编写一个面世问候 /root/helloworld.sh 脚本,执行后显示出一段话“Hello ...

  7. react教程 — 开发 总结

    本文章是在熟练使用 VUE 的基础上,对比VUE 功能进行的一个技术总结. 1.react项目快速搭建  https://blog.csdn.net/mapbar_front/article/deta ...

  8. Linux系统之-TCP-IP链路层

    一.基本 网络层协议的数据单元是 IP 数据报 ,而数据链路层的工作就是把网络层交下来的 IP 数据报 封装为 帧(frame)发送到链路上,以及把接收到的帧中的数据取出并上交给网络层. 为达到这一目 ...

  9. Sqli labs系列-less-5&6 报错注入法(下)

    我先输入 ' 让其出错. 然后知道语句是单引号闭合. 然后直接 and 1=1 测试. 返回正常,再 and 1=2 . 返回错误,开始猜表段数. 恩,3位.让其报错,然后注入... 擦,不错出,再加 ...

  10. sqlserver2012分页注意事项

    SELECT orderid, orderdate, custid, empid FROM Sales.Orders ORDER BY orderdate, orderid OFFSET 600 RO ...