今天看到了一行这样的代码:

boundary = '%.32x' % random.randint(0, 256**16)

我知道这是一个生成格式化字符串的语句,它将随机生成的一个32位16进制数,将这个数转换为字符串赋值给boundary。这个boundary将用来标记在网络上传输的若干个数据块之间的边界。

随机数上限,25616==1632,这点很容易理解。但python的修炼还不到家,'%.32x'这种格式化输出的方式让我稍微有些困惑。指定32,是确保生成的边界界定字符串为32位,若不指定32,那么生成的随机数若首位或前几位为零将会被忽略掉(虽然这样的概率较小,但不可忽视),不能生成满足要求的32位界定符。

下面,将python的格式化输出小小归纳一下。

格式符

格式符为真实值预留位置,并指定其显示格式,格式符包含一个类型码(typecode),用来控制显示的类型:

类型码 含义
%s 字符串 (采用str()的显示)
%r 字符串 (采用repr()的显示)
%c 单个字符
%b 二进制整数
%d 十进制整数
%i 十进制整数
%o 八进制整数
%x 十六进制整数
%e 指数 (基底写为e)
%E 指数 (基底写为E)
%f 浮点数
%F 浮点数,与上相同
%g 指数(e)或浮点数 (根据显示长度)
%G 指数(E)或浮点数 (根据显示长度)
%% 字符"%"

说明1:str()repr()在特性和功能方面都比较类似,但前者对用户比较友好,适用于print输出;而后者对python本身比较亲近,能方便将其它类型转换为python可识别的字符串。(具体可参考str和repr区别

说明2: %%表示输出百分号%

说明3:至于%d%i有何区别,任意整数和无符号整数的区别吗?好像不是。这个问题我也还没弄清楚。

高级控制

格式:
%[(name)][flags][width].[precision]typecode

typecode:上表中所列

name:命名

flags:可以有+,-,' '或0。+表示右对齐。-表示左对齐。' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填充。

width:表示显示宽度

precision:表示小数点后精度



最后,附上一个使用name的例子:

print "Logging file path: %(path)s.\n Timestamp:%(timestampe).4f" %
{'path':'/var/log/ecsyslog', 'timestamp':time.time()}

最新文章

  1. 【日常笔记】java spring 注解读取文件
  2. poj 2503:Babelfish(字典树,经典题,字典翻译)
  3. 【python】format函数格式化字符串的用法
  4. C#中string.Empty ,"" , null 区别
  5. C堆栈
  6. .Net HttpPost的发送和接收示例代码
  7. 任务调度 QUARTZ
  8. Node.js HTTP 使用详解
  9. 前端魔法堂:屏蔽Backspace导致页面回退
  10. ubuntu PHP相关操作
  11. NoClassDefFoundError: org/apache/commons/lang3/StringUtils
  12. 从二进制数据流中构造GDAL可以读取的图像数据(C#)
  13. Android学习之Animation(二)
  14. 微信H5支付开发(maven仓库版)
  15. P2089 烤鸡(搜索简单题)
  16. java中的a++与++a的区别
  17. 【Unity&C#】lambda函数
  18. mysql sql注入getshell新姿势
  19. C++ #和##运算符
  20. tensorflow学习2-线性拟合和神经网路拟合

热门文章

  1. extjs grid禁止表格头部使用鼠标拖拽改变宽度
  2. Linux学习笔记之Linux相关知识
  3. [读书笔记3]《C语言嵌入式系统编程修炼》
  4. 红黑树与AVL(平衡二叉树)的区别
  5. Canvas入门笔记-实现极简画笔
  6. acm练习-day1_1
  7. Eclipse+JUnit+Selenium配置
  8. 北大ACM(POJ1019-Number Sequence)
  9. What is JSON
  10. VS2015 安装包缺失(联网安装失败)问题解决