多个args

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多个args相关的知识,希望对你有一定的参考价值。

我有一个带序列号的文本文档,我想创建一个程序,您可以在其中运行一个函数,告诉您文本文档中出现了多少次某个序列号。我希望参数是无限的,因为我可以要求3个不同的序列号或只需1个。

list of serial numbers:
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4e
nmos_4e
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4t
pmos_4f
nmos_4t
nmos_4f

current code:
def find_serial(*serial):

    f = open('C:/Users/joann/Desktop/pmos.txt', 'r')
    for z in range(len(serial)):


        x = 0
        lines = f.readlines()
        for i in lines:
            if (serial[z-1] in i):
                x += 1
        print(x)


    f.close()

当我运行它时,我得到第一个值出现的次数,但它显示其余值为0。

>>> find_serial('pmos_4e', 'nmos_4e', 'pmos_4t', 'pmos_4f')
6
0
0
0
答案

Solution_Update

filename = "serials.txt"

def find_serial(*serial):

    serial_1, serial_2, serial_3, serial_4 = serial
    serials = [serial_1, serial_2, serial_3, serial_4]
    f = open('serials.txt', 'r')
    contents = f.read().split()

    for i in serials:
        x = 0
        for j in contents:
            if i == j:
                x +=1
        print(f"{i} count: {x}")

find_serial('pmos_4e', 'nmos_4e', 'pmos_4t', 'pmos_4f')

相同的解决方案,但我注意到你想立即将所有参数传递给函数,所以我重写了它,所以你可以按照你原来的方式执行find_serial函数!

Solution_Original

filename = "serials.txt"

def find_serial(serial):
    f = open('serials.txt', 'r')
    contents = f.read().split()   
    x = 0
    for i in contents:
        if i == serial:
            x +=1
    print(f"{serial} count: {x}")

serials = ['pmos_4e', 'nmos_4e', 'pmos_4t', 'pmos_4f']
for i in serials:
    find_serial(i)

使用f.read().split()将为我们提供文本中每个单词的列表,由于所有这些序列都是一个单词,因此这是一个使用它的好机会。然后我们可以使用for i in contents并只比较i与我们的serial并增加x计数。

产量

(xenial)vash@localhost:~/python$ python3.7 helpin.py 
pmos_4e count: 6
nmos_4e count: 6
pmos_4t count: 6
pmos_4f count: 6
另一答案

您只看到第一个值,因为您只持有一个计数器并单独递增。

实现你的意图的最好方法是简单地使用collections.counter:

from collections import Counter
with open('C:/Users/joann/Desktop/pmos.txt', 'r') as f:
    content = f.read()
count = Counter(content.split())

然后你可以简单地做:

count['pmos_4e']

得到你要找的号码

最终的代码看起来应该是这样的:

def find_serial(*serials):
     with open('C:/Users/joann/Desktop/pmos.txt', 'r') as f:
         content = f.read()
     count = Counter(content.split())
     for serial in serials:
         print(count[serial])

(如你所见,不需要两个循环...)

以上是关于多个args的主要内容,如果未能解决你的问题,请参考以下文章

多线程 Thread 线程同步 synchronized

Chrome-Devtools代码片段中的多个JS库

Visual Studio 2012-2019的130多个jQuery代码片段。

如何正确地将多个片段添加到片段过渡?

替换从 VAST 代码返回的多个 HLS VOD 片段

面试常用的代码片段