python之字符串中插入变量
方法一:也是 比较好用的,功能教齐全
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之字符串中插入变量的更多相关文章
- php基础10:字符串中插入变量
<?php //插入字符串 //1.双引号可以解析字符串中的变量:但是前后不能跟中文符号 $username = "gaoxiong"; echo "my name ...
- python字符串中插入变量
- python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字
python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...
- PHP字符串中的变量解析(+教你如何在PHP字符串中加入变量)
定义字符串的时候,用单引号或者双引号都是可以的.我个人习惯是用双引号.在输出字符串的时候,若字符串中含有字符串变量,使用单引号和双引号则是有区别的.如下面程序: 1 2 3 4 5 6 7 8 < ...
- C++ 在字符串中插入子串+推断字符串是否由空格组成
// Example3.cpp : 定义控制台应用程序的入口点. #include "StdAfx.h" #include <string> #include < ...
- python之字符串中有关%d,%2d,%02d的问题
python之字符串中有关%d,%2d,%02d的问题 在python中,通过使用%,实现格式化字符串的目的.(这与c语言一致) 其中,在格式化整数和浮点数时可以指定是否补0和整数与小数的位数. 首先 ...
- PHP 自定义字符串中的变量名解析
PHP 自定义字符串中的变量名解析 这样一个需求:页面的 title 可以在后台自定义,自定义内容中可能包含变量,变量用 {$var} 表示, 其中 $var 为变量名 将 title 字段存入数 ...
- python 判断字符串中是否只有中文字符
python 判断字符串中是否只有中文字符 学习了:https://segmentfault.com/q/1010000007898150 def is_all_zh(s): for c in s: ...
- python判断字符串中是否包含子字符串
python判断字符串中是否包含子字符串 s = '1234问沃尔沃434' if s.find('沃尔沃') != -1: print('存在') else: print('不存在' ...
随机推荐
- poj3252 Round Numbers(数位dp)
题目传送门 Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16439 Accepted: 6 ...
- 使用批处理发布 QT 的程序
1. 将 QT Creator 生成的 exe 文件拷贝到一个目录中 :C:\Users\zyy\Desktop\qtrelease 2.新建 bat 文件:qt.bat . 编辑文件,注意替换 QT ...
- mySQL的表连接
一.mysql表的连接方式 内连接和外连接的区别: 我把两个表比作集合A.B,其中,内连接是集合A和集合B的交集,而交集的内容在两个表中都存在,即在每一个表的内部:而外连接则是除了交集外,还有另一个表 ...
- tomcat在cmd中部署到系统服务
基本步骤: 1.首先把整个tomcat拷贝到安装路径 2.打开cmd,设置JAVA_HOME,设置的值是对应cmd的局部变量 set JAVA_HOME=E:\tmp\2016\bghc\jdk1.7 ...
- WPF可视对象变换(RenderTransform)-----RotateTransform、TranslateTransform、ScaleTransform
前言:对于可是元素,我们常见有三种变化,旋转.平移.面积 一. 旋转(RotateTransform) <RotateTransform CenterX="></Rota ...
- hashRouter and BrowserRouter
<html><body> <div> <button class="btn" onclick="btnFun();"& ...
- css3--css3模块
CSS3被拆分为"模块".旧规范已拆分成小块,还增加了新的. 一些最重要CSS3模块如下: 1.选择器(.基本选择器,层次选择器,伪类选择器,伪元素,属性选择器,通配符) 2.盒模 ...
- js实用小函数收集
格式化金额 var val='212312.235423' var rex = /\d{1,3}(?=(\d{3})+$)/g; val.replace(/^(-?)(\d+)((\.\d+)?) ...
- git小乌龟图标不显示 windows系统
1.修改注册表[windows + R 输入 regedit]进入注册信息,按照步骤找到 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curre ...
- 1.Configuration
1.Configuration(public sealed class Configuration) 定义:表示适用于特定计算机.应用程序或资源的配置文件. 此类不能被继承 获取实例: Configu ...