Py学习  »  问与答

python语法问题 for后边加if 判断

heres_y • 6 年前 • 1326 次点击  

python小白一个,只有C/C++基础。最近在研究一段关于强化学习NEC的算法,在看到args.layer_sizes = [int(i) for i in (args.layer_sizes.split(',') if args.layer_sizes else [])]这句话时候疑惑不解,for 后边加if是什么意思,for后边还没有加“:”这个语句为什么还合法?有没有什么相似的例子呢,多谢!

`if __name__ == '__main__':

parser = argparse.ArgumentParser()#创建一个解析对象
parser.add_argument('--env', type=str, default='CartPole-v0',
                   help='Name of Gym environment')#向该对象中添加要关注的命令行参数和选项

parser.add_argument('--training_iters', type=int, default=500000,
                   help='Number of training iterations to run for')
parser.add_argument('--display_step', type=int, default=2500,
                   help='Number of iterations between parameter prints')

parser.add_argument('--memory_size', type=int, default=1000,
                   help='Size of DND dictionary')
parser.add_argument('--replay_memory_size', type=int, default=1000,
                   help='Size of replay memory')
parser.add_argument('--batch_size', type=int, default=32,
                   help='Size of batch for Q-value updates')

parser.add_argument('--beta', type=float, default=0, # see particle value functions
                   help='Beta for adjusted returns')

parser.add_argument('--discount', type=float, default=0.9,
                   help='Discount factor')
parser.add_argument('--epsilon', type=float, default=0.1,
                   help='Initial epsilon')
parser.add_argument('--epsilon_final', type=float, default=None,
                   help='Final epsilon')
parser.add_argument('--epsilon_anneal', type=int, default=None,
                   help='Epsilon anneal steps')
parser.add_argument('--learning_rate', type=float, default=0.001,
                   help='Learning rate for TD updates')
parser.add_argument('--reg', type=float, default=0, #0.1 seems to work here
                   help='Regularization parameter for network')

parser.add_argument('--layer_sizes', type=str, default='64',
                   help='Hidden layer sizes for network, separate with comma')

parser.add_argument('--chk_dir', type=str, default=None,
                   help='data directory to save checkpoints')
parser.add_argument('--chk_name', type=str, default='model',
                   help='Name to save checkpoints as')




    
parser.add_argument('--resume_from', type=str, default=None,
                   help='Location of checkpoint to resume from')

parser.add_argument('--play_from', type=str, default=None,
                   help='Location of checkpoint to play game from (remember, you need the same layer sizes!)')

args = parser.parse_args()#调用parse_args()方法进行解析

if args.epsilon_final == None:
    args.epsilon_final = args.epsilon
if args.epsilon_anneal == None:
    args.epsilon_anneal = args.training_iters

args.layer_sizes = [int(i) for i in (args.layer_sizes.split(',') if args.layer_sizes else [])]

print args

tf.app.run()

`

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2729
 
1326 次点击  
文章 [ 1 ]  |  最新文章 6 年前
Py站长
Reply   •   1 楼
Py站长    6 年前

迭代式的写法

args.layer_sizes = [int(i) for i in (args.layer_sizes.split(',') if args.layer_sizes else [])]

相当于

if args.layer_sizes:
    index =0 
    for i in (args.layer_sizes.split(','):
             args.layer_sizes[index]=int(i)
                 index+=1
else:
   args.layer_sizes=[]