eval 的用法,以及python中推导列表的案例

Python014

eval 的用法,以及python中推导列表的案例,第1张

>>>a = [[1,2,3],[2,4,5],[1,2,3]]

>>>for i in range(len(a[0])):       第一种方法

...     a[0][i],a[1][i],a[2][i]               此为tuple形式

(1, 2,1)

(2, 4,2)

(3, 5,3)

>>>for i in range(len(a[0])):

...   print([a[0][i],a[1][i],a[2][i]])       注意括号决定了输出 的形式

[1, 2,1]                                             

[2, 4,2]

[3, 5,3]

>>>eval("a[0]")

[1, 2,3]

>>>eval("a[0][0]")

1

>>>eval("a[0][0],a[1][0],a[2][0]")

(1, 2,1)

a =[[1,2,3],[2,4,5],[1,2,3]]        第二种方法

>>>s = ""                 定义一个 为s的字符串

>>>l = []                 定义一个为l 的列表

>>>for i in range(len(a[0])):i大循环是a[][]第二个括号里的值

...     for j in range(len(a)):j是a[][]第一个括号里的值

...         s += "a[%s][%s]," % (j,i)  输出的格式把前面的加上

...     l.append(s)  三个为一组添加到 l 列表里

...     s = ""        s字符串重新置空,开始第二次循环

...

>>>l

     第一次循环结果               置空后第二次循环结果

['a[0][0],a[1][0],a[2][0],','a[0][1],a[1][1],a[2][1],','a[0][2],a[1][2],a[2][2],']

    置空后第三次循环结果

>>>[eval(i) for i in l]   循环l里的三个元素 并输出结果

[(1,2, 1), (2, 4, 2), (3, 5, 3)]

I

在一些测试平台对接时或者用例执行时,或多或少会用到Python脚本传参的问题。

test.py脚本

#!/usr/bin/python3

import sys

print ('参数个数为:', len(sys.argv), '个参数。')

print ('参数列表:', str(sys.argv))

print ('脚本名:', str(sys.argv[0]))

print ('第一个参数:', sys.argv[1])

执行python3 test.py arg1 arg2 arg3

参数个数为: 4 个参数。

参数列表: ['test.py', 'arg1', 'arg2', 'arg3']

脚本名: test.py

第一个参数: arg1

test.py脚本

#!/usr/bin/python3

import argparse

# 生成了一个命令行参数的对象

parser = argparse.ArgumentParser(description='Test for argparse')

parser.add_argument('--name', '-n', help='name属性,非必要参数')

parser.add_argument('--year', '-y', help='year 属性,非必要参数,但有默认值', default=2017)

parser.add_argument('--body', '-b', help='body属性,必要参数', required=True)

args = parser.parse_args()

print (args.year,  args.name, args.body)

查看帮助python3 test.py --help

usage: test.py [-h] [--name NAME] [--year YEAR] --body BODY

Test for argparse

optional arguments:

  -h, --help  show this help message and exit

  --name或-n NAME  name属性,非必要参数

  --year或-y YEAR  year属性,非必要参数,但有默认值

  --body或-b BODY  body 属性,必要参数

执行python3 test.py --year 2021 -n robot  --body "are you ok?"

2021 robot are you ok?

以方法2中的test.py脚本为例

python3 test.py --year 2021 --body [\"test\", \"robot\",\"boy\" ]

2021 ["test", "robot", "boy" ]

以方法1中的test.py脚本为例

python3 test.py [\"test\", \"robot\",\"boy\" ]

参数个数为: 2个参数。

参数列表: ['test.py', '[\"test\", \"robot\", \"boy\" ]']

脚本名: test.py

第一个参数: ["test", "robot", "boy" ]

其实此时传入的第一个参数是一个字符,需要转换为列表。

import json

json.loads(sys.argv[1])

test_arg.py脚本

#!/usr/bin/python3

import argparse

import os

# 生成了一个命令行参数的对象

parser = argparse.ArgumentParser(description='Test for argparse')

parser.add_argument('--body', '-b', help='body属性,必要参数', required=True)

args = parser.parse_args()

print (args.body)

command=python3 + '  ' + test_sys.py+ '  '  + args.body

print (command)

str=('command')

result=os.system(str)

test_sys.py脚本

#!/usr/bin/python3

import sys

import json

print ('第一个参数:', sys.argv[1])

print ('列表:', json.loads(sys.argv[1]))

执行python3 test_arg.py --body  [\"test\", \"robot\",\"boy\" ]

python3  test_sys.py  ["test", "robot", "boy" ]

test_sys.py执行报错,转json失败。

还记得我们案例2中,脚本的传入指定参数和实际传入参数嘛?

test_arg.py脚本我们稍微优化下,在传参前先字符替换下。

["test", "robot", "boy" ]转换为[\"test\", \"robot\",\"boy\" ]即可。

command.replace(' " ' , r ' \" ') 添加到command=之后,再次运行看看呢?

python 读取文本文件内容转化为python的list列表,案例如下:

1、目的

读取cal.txt内容,然后通过python脚本转化为list内容

2、文件内容

cal.txt

12

13

14

15

16

3、Python编写cal.py脚本内容

#!/usr/bin/python

#coding = UFT-8

result=[]

fd = file( "cal.txt", "r" )

for line in fd.readlines():

    result.append(list(map(int,line.split(','))))

print(result)

for item in result:

    for it in item:

       print it

4、执行转换为List列表结果内容:

[[12], [13], [14], [15], [16]]

12

13

14

15

16