前言:
suffix = ('_' + opt.suffix.format(**vars(opt))) if opt.suffix != '' else ''
这行代码包含三个语法。
1. 条件语句
可以写成下面的形式:
if opt.suffix != '' suffix = ('_' + opt.suffix.format(**vars(opt))) else suffix = ''
2. vars(opt)
返回对象object的属性和属性值的字典对象,如果没有参数,就打印当前调用位置的属性和属性值 类似 locals()。
1. vars操作的是“对象”,不能操作普通变量。
3. **的用法
3.1 ** 在python里面表示幂运算
3.2 Python 中 str.format() 方法详解
https://blog.csdn.net/jpch89/article/details/84099277
3.3 传递实参和定义形参
(所谓实参就是调用函数时传入的参数,形参则是定义函数是定义的参数)的时候,你还可以使用两个特殊的语法:''*'' ''**'' 。
3.3.1调用函数时使用
一个星(*):表示接收的参数作为元组来处理
两个星(**):表示接收的参数作为字典来处理
test(*args) 的作用其实就是把序列 args 中的每个元素,当作位置参数传进去。比如上面这个代码,如果 args 等于 (1,2,3) ,那么这个代码就等价于 test(1, 2, 3) 。
test(**kwargs) 的作用则是把字典 kwargs 变成关键字参数传递。比如上面这个代码,如果 kwargs 等于 {'a':1,'b':2,'c':3} ,那这个代码就等价于 test(a=1,b=2,c=3) 。
3.3.2 定义函数参数时使用* **
def test(*args):
...定义函数参数时 * 的含义又要有所不同,在这里 *args 表示把传进来的位置参数都装在元组 args 里面。比如说上面这个函数,调用 test(1, 2, 3) 的话, args 的值就是 (1, 2, 3) 。:
def test(**kwargs):
...类似的, ** 就是针对关键字参数和字典的了。 调用 test(a=1,b=2,c=3) 的话, kwargs 的值就是 {'a':1,'b':2,'c':3} 了。
注意:
普通的参数定义和传递方式和 * 们都可以和平共处,不过显然 * 必须放在所有位置参数的最后,而 ** 则必须放在所有关键字参数的最后,否则就要产生歧义了