精华内容
下载资源
问答
  • python中row的用法
    万次阅读
    2021-01-29 06:11:11

    row函数的使用方法

    在平时的日常工作中,Excel中row函数怎么使用?下面是由百分网小编为大家准备的row函数的使用方法,喜欢的可以收藏一下!了解更多详情资讯,请关注应届毕业生考试网!

    1.row函数的含义

    返回所选择的某一个单元格的'行数。

    2.row函数的语法格式

    =row(reference)

    如果省略reference,则默认返回row函数所在单元格的行数。

    3.row函数案列

    如图所示,输入公式=row(C6)。返回C6单元格所在列,返回6。

    如图所示,如果 reference 为一个单元格区域,返回引用中的第一行的列号。

    这里第一行为B5所在行,返回5。

    如图所示,row函数常常和mod函数结合起来使用。

    输入公式=MOD(ROW(B2:B17),4),

    公式解释:返回单元格所在行,然后能否被4整除取余数。如图所示,余数是有规律的。

    如图所示,每个季度合计行的余数都为1,利用这个特性进行跨行求和。

    输入公式=SUM(IF(MOD(ROW(B2:B17),4)=1,B2:B17))

    公式解释:看余数是否为1,是就参与计算。

    由于是数组,所以输入公式后按shift+ctrl+enter。

    4.row函数使用的注意点

    如果省略reference,则默认返回row函数所在单元格的行数。

    【row函数的使用方法】相关文章:

    更多相关内容
  • 主要介绍了python sqlite的Row对象操作,结合实例形式分析了Python使用sqlite的Row对象进行数据的查询操作相关实现技巧,需要的朋友可以参考下
  • python中entry用法讲解

    2020-12-16 19:37:34
    小编之前向大家讲解了很多关于字符串的知识,大家也都知道字符串在python中的作用很大,那你知道在python中用于接收字符串等输入,让用户可与之交互以输入或操作字符串数据的对象是什么吗?... 因此创建方法中的 opt
  • row python

    千次阅读 2020-12-08 06:27:58
    1、python脚本经常第一句出现#!/usr/bin/env python或#!/usr/bin/python。这句话的意义下面解释:脚本语言的第一行,目的就是指出,你想要你的这个文件的代码用什么可.../usr/bin/env python这种用法是为了防止...

    1、python脚本中经常第一句出现#!/usr/bin/env python或#!/usr/bin/python。这句话的意义下面解释:

    脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单

    !/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器;

    !/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。

    !/usr/bin/python相当于写死了python路径;

    !/usr/bin/env python会去环境设置寻找python目录,推荐这种写法

    如果你用 python xxoo.py 来运行,那么写不写都没关系,如果要用 ./xxoo.py 那么就必须加这行, 用来为脚本语言指定解释器.

    通常认为用 #!/usr/bin/env python 要比 #!/usr/bin/python 更好,因为 python 解释器有时并不安装在默认路径,例如在 virtualenv 中。

    当你把py文件直接赋予执行权限去执行 ./yourfile.py 的时候,给文件指定一个解释器。

    而 #!/usr/bin/python 是一般默认的python解释器的路径,所以这种的就是装在默认位置的不会出问题。

    但是 #!/usr/bin/envpython 则更加通用一些会去你的PATH 中寻找python 。

    python脚本的两种调用方式说明:

    1、./run.py.shell直接调用python脚本

    2、python run.py 调用python 解释器来调用python脚本

    先分别解释:

    1、./run.py调用脚本的方式。shell把run.py当成一般的脚本看待,不把它当成python脚本。按这种方式调用脚本,python 脚本的第一行必须有:

    !/usr/bin/env python3(或#!/usr/bin/env python)

    先举例子说明,在说明原因:

    未加#!/usr/bin/env python3的情况:

    a.py:

    print ('a')

    说明:要使用./a.py,必须使用chmod将a.py的属性改成可执行的。

    chmod 755 a.py

    -rwxr-xr-x 1 root root 12 Nov 27 09:43 a.py

    如果a.py是不可执行的,那么./a.py就会报如下错误。

    -bash: ./a.py: Permissiondenied

    在将a.py改为可执行后,如果使用./a.py,还是会报错。

    ./a.py: line 1: syntaxerror near unexpected token `'a''

    ./a.py: line 1: `print('a')'

    但是,因为我系统中装了python2和python3.

    所以,使用#!/usr/bin/env python3提示shell使用python3来调用脚本.

    a.py内容如下:---------------------------------------------------------------------------------------------------

    !/usr/bin/env python3

    print ('a')

    执行结果为:a

    python3 print函数必须要加上().

    所以,如果上述的print('a')变为print 'a',显然是会报错的。

    root@iZ28yi4s6zwZ:/mnt/DisplayAdvertisingChallenge/Gbdt_Fm_Kaggle#./a.py

    File "./a.py", line 2

    print 'a'

    ^

    SyntaxError: invalidsyntax

    以上就说明了,使用./run.py调用python脚本的方式,取决于你在python脚本中第一句,并且使用./run.py必须在脚本文件中写上#!/usr/bin/env python3(或类似的命令),不然都执行不了。

    1、先说明一下,我的系统中是预装了python2,然后我装了python3,并且系统默认的python是python2。我装了python3并没有改变系统默认的python解释器,也不建议把系统默认的python解释器改变了,因为像scikit-learn等库很多还是基于python2.7的,你把系统默认的python改成python3会导致很多库出问题。

    2、看一下/usr/bin:就知道在ubuntu中,各种软件的安装情况

    lrwxrwxrwx 1 root root 9 Jun 19 2013 python -> python2.7

    lrwxrwxrwx 1 root root 9 Jun 19 2013 python2 -> python2.7

    -rwxr-xr-x 1 root root 2985296 Dec 19 2014 python2.7

    lrwxrwxrwx 1 root root 30 Nov 26 10:08 python3 ->/opt/python3.3.2/bin/python3.3

    说明:

    1、python-> python2.7:系统默认的python是python2.7

    2、python2-> python2.7:python2执行的是python2.7

    3、python3-> /opt/python3.3.2/bin/python3.3:python3执行的是/opt/python3.3.2/bin/python3.3

    现在做个试验:说明使用./run.py的方式,随着第一句#!/usr/bin/envpython3的不同,shell会调用不同的python解释器。

    1、

    [python] view plain copy

    !/usr/bin/env python3

    import subprocess, sys, os, time

    NR_THREAD = 1

    start = time.time()

    cmd = 'converters/pre-a.py trainsample0.25.csv tr.gbdt.dense tr.gbdt.sparse' subprocess.call(cmd, shell=True)

    cmd = 'converters/pre-a.py testsample0.25.csv te.gbdt.dense te.gbdt.sparse' subprocess.call(cmd, shell=True)

    print ("end pre-a.py")

    中断程序查看shell调用哪个python解释器:

    File"./run_test.py", line 10, in

    subprocess.call(cmd, shell=True)

    File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 522, incall

    Traceback (most recentcall last):

    File "converters/pre-a.py", line36, in

    key = field + '-' + row[field]

    KeyboardInterrupt

    return p.wait(timeout=timeout)

    File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 1528,in wait

    (pid, sts) = self._try_wait(0)

    File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 1485,in _try_wait

    (pid, sts) = _eintr_retry_call(os.waitpid,self.pid, wait_flags)

    File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 476, in_eintr_retry_call

    return func(*args)

    KeyboardInterrupt

    很明显,使用#!/usr/bin/env python3,那么shell就调用了python3的解释器。

    2、

    [python] view plain copy

    !/usr/bin/env python2

    import subprocess, sys, os, time

    NR_THREAD = 1

    start = time.time()

    cmd = 'converters/pre-a.py trainsample0.25.csv tr.gbdt.dense tr.gbdt.sparse' subprocess.call(cmd, shell=True)

    cmd = 'converters/pre-a.py testsample0.25.csv te.gbdt.dense te.gbdt.sparse' subprocess.call(cmd, shell=True)

    print ("end pre-a.py")

    中断程序查看shell调用哪个python解释器:

    Traceback (most recentcall last):

    File "./run_test.py", line 10, in

    subprocess.call(cmd, shell=True)

    File "/usr/lib/python2.7/subprocess.py",line 493, in call

    return Popen(*popenargs, **kwargs).wait()

    File "/usr/lib/python2.7/subprocess.py",line 1291, in wait

    pid, sts = _eintr_retry_call(os.waitpid,self.pid, 0)

    File "/usr/lib/python2.7/subprocess.py",line 478, in _eintr_retry_call

    return func(*args)

    KeyboardInterrupt

    很明显,使用#!/usr/bin/env python2,那么shell就调用了python2的解释器。

    3、

    [python] view plain copy

    !/usr/bin/env python

    import subprocess, sys, os, time

    NR_THREAD = 1

    start = time.time()

    cmd = 'converters/pre-a.py trainsample0.25.csv tr.gbdt.dense tr.gbdt.sparse' subprocess.call(cmd, shell=True)

    cmd = 'converters/pre-a.py testsample0.25.csv te.gbdt.dense te.gbdt.sparse' subprocess.call(cmd, shell=True)

    print ("endpre-a.py")

    中断程序查看shell调用哪个python解释器:

    File"./run_test.py", line 10, in

    subprocess.call(cmd, shell=True)

    File "/usr/lib/python2.7/subprocess.py",line 493, in call

    return Popen(*popenargs, **kwargs).wait()

    File "/usr/lib/python2.7/subprocess.py",line 1291, in wait

    pid, sts = _eintr_retry_call(os.waitpid,self.pid, 0)

    File "/usr/lib/python2.7/subprocess.py",line 478, in _eintr_retry_call

    return func(*args)

    KeyboardInterrupt

    root@iZ28yi4s6zwZ:/mnt/DisplayAdvertisingChallenge/Gbdt_Fm_Kaggle#Traceback (most recent call last):

    File "converters/pre-a.py", line19, in

    for row incsv.DictReader(open(args['csv_path'])):

    File "/opt/python3.3.2/lib/python3.3/csv.py", line 118, in__next__

    d = dict(zip(self.fieldnames, row))

    KeyboardInterrupt

    很明显,使用#!/usr/bin/env python,那么shell就调用了系统默认的python解释器,也就是python2。python -> python2.7。那么,为什么还会出现python3.3.2。那是因为程序中,subprocess.call(cmd, shell=True),开了一个子进程,使用了shell来调用pre-a.py,pre-a.py肯定是使用#!/usr/bin/envpython3

    .pre-a.py脚本的内容如下:

    [python] view plain copy

    !/usr/bin/env python3

    import argparse, csv, sys

    from common import *

    if len(sys.argv) == 1:

    sys.argv.append('-h')

    parser = argparse.ArgumentParser() parser.add_argument('csv_path', type=str) parser.add_argument('dense_path', type=str) parser.add_argument('sparse_path', type=str) args = vars(parser.parse_args())

    2、如果使用python run.py 的方式来调用脚本,那么脚本文件中的第一句#!/usr/bin/envpython3就会被自动略掉,不会起到任何的作用。

    python2 run.py代表使用默认的python2解释器来调用脚本。

    python3 run.py 代表使用默认的python3解释器来调用脚本。

    python run.py 代表使用默认的python解释器来调用脚本。

    python run_test.py:

    ^CTraceback (mostrecent call last):

    File "run_test.py", line 10, in

    subprocess.call(cmd, shell=True)

    File "/usr/lib/python2.7/subprocess.py",line 493, in call

    return Popen(*popenargs, **kwargs).wait()

    File "/usr/lib/python2.7/subprocess.py",line 1291, in wait

    pid, sts = _eintr_retry_call(os.waitpid,self.pid, 0)

    File "/usr/lib/python2.7/subprocess.py",line 478, in _eintr_retry_call

    return func(*args)

    KeyboardInterrupt

    root@iZ28yi4s6zwZ:/mnt/DisplayAdvertisingChallenge/Gbdt_Fm_Kaggle#Traceback (most recent call last):

    File "converters/pre-a.py", line22, in

    val = row['I{0}'.format(j)]

    KeyboardInterrupt

    很明显,python run_test.py,使用默认的python解释器(python2)来调用脚本。

    python3 run_test.py:

    ^CTraceback (mostrecent call last):

    File "run_test.py", line 10, in

    subprocess.call(cmd, shell=True)

    File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 522, in call

    return p.wait(timeout=timeout)

    File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 1528, in wait

    (pid, sts) = self._try_wait(0)

    File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 1485, in _try_wait

    (pid, sts) = _eintr_retry_call(os.waitpid,self.pid, wait_flags)

    File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 476, in _eintr_retry_call

    return func(*args)

    KeyboardInterrupt

    root@iZ28yi4s6zwZ:/mnt/DisplayAdvertisingChallenge/Gbdt_Fm_Kaggle#Traceback (most recent call last):

    File "converters/pre-a.py", line19, in

    for row incsv.DictReader(open(args['csv_path'])):

    File "/opt/python3.3.2/lib/python3.3/csv.py", line 118, in next

    d = dict(zip(self.fieldnames, row))

    KeyboardInterrupt

    展开全文
  • Python中的2D列表(row total/grand total)

    千次阅读 2020-12-08 12:18:05
    我认为一个接一个地分解你的尝试...但是,我假设您在代码中使用的输入列表如下所示:[['1', '1', '-2'], ['-1', '-2', '-3'], ['1', '1', '1']]它需要将其元素强制转换为int以避免崩溃。在尝试1您的代码:^{pr2}$主...

    我认为一个接一个地分解你的尝试,并讨论每一个尝试中出现的问题是有指导意义的。在

    对于初学者来说,您的输入列表是一个二维的数字列表。你需要把它们投给int,最好是马上就投。但是,我假设您在代码中使用的输入列表如下所示:[['1', '1', '-2'], ['-1', '-2', '-3'], ['1', '1', '1']]

    它需要将其元素强制转换为int以避免崩溃。在

    尝试1

    您的代码:

    ^{pr2}$

    主要的误解是您的语句for row in numbers:循环遍历numbers列表中的实际列表,而不是该列表的索引。换句话说,row在第一次迭代中等于['1', '1', '-2'],而不是{}。在

    类似地,for column in numbers:被错误地标记,并且还迭代行列表,而不是行中预期的单元格。当您尝试使用这些项索引到列表numbers时,会发生崩溃。您的代码正在执行以下操作:numbers[['1', '1', '-2']][['1', '1', '-2']] # crash

    通过不尝试索引到numbers列表,而是使用row和column元素来计算总数,可以解决这个问题。在

    您还存在一个逻辑错误,该错误过早地将rowtotal添加到聚合total中,这会超出计数。在

    最后,前两行什么也不做,因为循环变量覆盖了值;删除它们。在

    以下是重写:total = 0

    for row in numbers:

    rowtotal = 0

    for column in row: # < iterating cells in rows

    rowtotal = rowtotal + int(column) # < much better

    total = total + rowtotal # < logic error fixed

    print(total)

    尝试2

    您的代码:row = len(numbers)

    column = len(numbers[0])

    total = 0

    for row in range (len(numbers)):

    for col in range(len(numbers[0])):

    total = total + numbers[row][column] # < crash!

    print(total)

    和第一个问题类似。在开头有两行引入变量row和{}。当您编写for row in range(len(numbers)):时,您将重写在第1行初始化的row变量。在

    但是,当您编写for col in range(len(numbers[0])):时,您并没有重写column,而是试图使用存储列表长度的越界变量{}索引到{},该变量存储了列表的长度,导致程序崩溃。在

    当然,如果您还没有转换到int,请不要忘记转换到int。在

    固定的:total = 0

    for row in range(len(numbers)):

    for col in range(len(numbers[row])): # added row here in case of a ragged list

    total += int(numbers[row][col])

    print(total)

    尝试3

    您的代码:total = 0

    for x in range (0, len(numbers)):

    rowtotal = 0

    for y in range (0, len(numbers[0])):

    rowtotal = rowtotal = int(numbers[x][y]) # < typo! = should be +

    print(rowtotal)

    total = total + rowtotal

    print(total)

    太近了!这里的问题是您使用了错误的运算符,=,而您的意思是+。我建议继续使用+=运算符,它将右手边的表达式添加到左侧变量,并将其存储在左侧变量中。在

    固定的:total = 0

    for x in range (0, len(numbers)):

    rowtotal = 0

    for y in range (0, len(numbers[0])):

    rowtotal = rowtotal + int(numbers[x][y]) # or use rowtotal += int(numbers[x][y])

    total += rowtotal

    print(total)

    我的版本

    我是这样写的:print(sum([sum([int(n) for n in row]) for row in numbers]))

    这使用了一个叫做列表理解的东西,它基本上是一个创建列表的单行for循环。在

    正如@jpp指出的print(sum([sum(map(int, row)) for row in numbers]))

    它甚至更短,使用map函数将int强制转换应用于row的每个元素。在

    不要强调这些是否令人困惑,重要的部分是学习如何debug your existing programs,这是所有关于一步一步评估你的假设和通过你的逻辑小块。当你有一个崩溃和一个打印的堆栈跟踪,这是很好的,它告诉你到底是什么地方出了问题,在哪里查找。如果这仍然不能使情况变得清楚,那么将代码简化到它可以正常工作并理解程序状态,然后重新构建。在

    这里有一个repl来演示所有的有效解决方案。在

    展开全文
  • 一文搞懂Python中的yield

    千次阅读 2020-12-03 04:32:39
    关注公众号「Python七号」,及时 get Python 技能。yield 可以实现生成器,可以实现协程。 什么是生成器,什么是协程,如果还不了解,可以继续往下看,概念可以不懂,只要理解它的作用和效果也可以的。先翻一下英文...

    关注公众号「Python七号」,及时 get Python 技能。

    yield 可以实现生成器,可以实现协程。 什么是生成器,什么是协程,如果还不了解,可以继续往下看,概念可以不懂,只要理解它的作用和效果也可以的。

    先翻一下英文单词 yield 的意思:

    to produce or provide sth, for example a profit, result or crop

    中文意思:出产(作物);产生(收益、效益等);提供。

    yield 实现生成器

    初学 Python 之时,我遇到 yield 关键字时,就把它理解为一种特殊的 return,能看懂就行,自己也很少用,也就没有深入研究过。直到现在,我需要处理大量数据,数据的大小甚至超过了电脑的可用内存,此时我想起来 yield。比如,我操作 db2 数据库查询数据,当数据的结果很大时,我不想一下子读入内存,我就使用了 yield 关键字返回一行数据,程序处理完后,再取下一行:

    def read(self, sql, params=()):

    stmt = ibm_db.prepare(self.connection, sql)

    for index, param in enumerate(params):

    ibm_db.bind_param(stmt, index + 1, param)

    ibm_db.execute(stmt)

    row = ibm_db.fetch_tuple(stmt)

    while row:

    yield row

    row = ibm_db.fetch_tuple(stmt)

    可以这么来理解关键字 yield 的用法:它返回了一个值,但程序并未退出,下一次从 yield 后面的代码继续运行,直到后面没有代码,结束运行。这里我们举一个简单的例子看下效果:

    >>> def iter_fun():

    ... print("a")

    ... yield 1

    ... print("b")

    ... yield 2

    ... print("c")

    ... yield 3

    ...

    >>> iter_fun()

    >>> for i in iter_fun():

    ... print(i)

    ...

    a

    1

    b

    2

    c

    3

    >>> x = iter_fun()

    >>> x.__next__()

    a

    1

    >>> x.__next__()

    b

    2

    >>> x.__next__()

    c

    3

    >>> x.__next__()

    Traceback (most recent call last):

    File "", line 1, in

    StopIteration

    通过上面的例子,我们可以发现,yield 关键字自动为我们生成来私有方法 __next__ ,这样不会将所有数据取出来存入内存中,用多少取多少,可以节省内存空间。

    除此之外,yield 再数据量较大时,执行速度也会提升:

    In [14]: def normal_fun(num):

    ...: result = []

    ...: for i in range(0,num):

    ...: if i%2 == 0:

    ...: result.append(i)

    ...: return result

    ...:

    In [14]: def iter_fun(num):

    ...: for i in range(0,num):

    ...: if i %2 == 0:

    ...: yield i

    ...:

    In [15]: %time for i in iter_fun(1000000): a = i

    CPU times: user 97 ms, sys: 2.55 ms, total: 99.6 ms

    Wall time: 97.2 ms

    In [16]: %time for i in normal_fun(1000000): a = i

    CPU times: user 115 ms, sys: 13.6 ms, total: 129 ms

    Wall time: 128 ms

    In [17]: %time for i in normal_fun(100000000): a = i

    CPU times: user 10.8 s, sys: 668 ms, total: 11.4 s

    Wall time: 11.4 s

    In [18]: %time for i in iter_fun(100000000): a = i

    CPU times: user 9.1 s, sys: 6.49 ms, total: 9.11 s

    Wall time: 9.12 s

    上述代码再 Ipython 终端中执行,可以看出使用 yield 的函数,执行的速度更快。

    yield 是自己实现一个生成器最便捷的方式。 而 Python 语言的生成器是最有用的特性之一,也是使用不广泛的特性,我曾问过周围用 java 的朋友又没有类似的特性,答曰没有,网上搜了下,确实主流的编程语言都没有,因此 Python 的生成器特性没有引起其他语言转 Python 的工程师的关注。

    为什么说生成器非常有用呢?

    当你需要处理的数据大小超过你电脑的可用内存时,生成器的懒加载(用的时才读入内存)就非常有效。

    比如读文件时,如果你使用下面的方式,文件特别大的话,可能内存一下子就满了:

    with open("file.txt","r") as reader:

    for line in reader.readlines():

    #do something

    pass

    推荐的做法是使用文件本身的生成器,这样读多大的文件,也不会撑爆内存:

    with open("file.txt","r") as reader:

    for line in reader:

    #do something

    pass

    其实我们可以看一下 reader 到底有哪些方法:

    >>> with open("/etc/passwd","r") as reader:

    ... dir(reader)

    ...

    ['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines']

    >>>

    我们可以看到,这里面有一个 __next__ 方法和一个 __next__ 方法,这两个方法是生成器的标志。

    想深入学习生成器,迭代器,可迭代对象,可以看我以前的推文:

    yield 可以实现协程

    yield 关键字还可以实现协程,虽然现在有来 asyncio 和 await 关键字来方便的实现协程,在此之前,实现协程就靠的是 yield。

    yield 有一个 send 方法,可以改变 yield 的返回值,是这样用的,先看代码:

    In [20]: def fun():

    ...: print("a")

    ...: a = yield 1

    ...: print("b")

    ...: print("a = ",a)

    ...: b = yield a

    ...: print("c")

    ...: print("b = ",b)

    ...:

    In [21]: x = fun()

    In [22]: x.__next__()

    a

    Out[22]: 1

    In [23]: x.send(4)

    b

    a = 4

    Out[23]: 4

    In [24]: x.send(5)

    c

    b = 5

    ---------------------------------------------------------------------------

    StopIteration Traceback (most recent call last)

    in

    ----> 1 x.send(5)

    第一次执行 x 的 next 方法时,函数执行到第一个 yield 处,打印了 a 返回了值 1,此时变量 a 并未获取到 yield 的返回值,a 为 None ,当执行 x.send(4) 时,a 才获取到值 4,程序运行到第二个 yield 处,后续过程也是一样。

    利用这一特性,我们可以和被调用的函数通信,进而可以实现一个生产者消费者模型,代码如下:

    import time

    def consume():

    r = ''

    while True:

    n = yield r

    if not n:

    return

    print('[consumer] consuming%s...' % n)

    time.sleep(1)

    r = 'well received'

    def produce(c):

    next(c)

    n = 0

    while n < 5:

    n = n + 1

    print('[producer] producing%s...' % n)

    r = c.send(n)

    print('[producer] consumer return:%s' % r)

    c.close()

    if __name__=='__main__':

    c = consume()

    produce(c)

    运行结果如下:

    [producer] producing 1...

    [consumer] consuming 1...

    [producer] consumer return: well received

    [producer] producing 2...

    [consumer] consuming 2...

    [producer] consumer return: well received

    [producer] producing 3...

    [consumer] consuming 3...

    [producer] consumer return: well received

    [producer] producing 4...

    [consumer] consuming 4...

    [producer] consumer return: well received

    [producer] producing 5...

    [consumer] consuming 5...

    [producer] consumer return: well received

    produce 和 consume 函数在一个线程内执行,通过调用 send 方法和yield 互相切换,实现协程的功能。

    关于协程的学习,可以看我以前的推文:

    如果您对文章感兴趣,请微信搜索「Python七号」并关注,第一时间获取一手原创干货。

    展开全文
  • 本文整理汇总了Python中sklearn.utils.extmath.row_norms方法的典型用法代码示例。如果您正苦于以下问题:Python extmath.row_norms方法的具体用法Python extmath.row_norms怎么用?Python extmath.row_norms使用...
  • 今天就iter函数的拓展,讲讲openpyxl导入iter_rows()的方法。当我们使用以下代码:import openpyxl as opms = op.load_workbook('mtest.xlsx')ws = ms.activeop.worksheet.Worksheet.iter_rows()然后会出现,此...
  • 在 Excel Row函数用于返回单元格的行号,Rows函数用于返回数组或引用单元格的行数。如果Row函数省略参数,默认返回公式所在...以下是 Excel Row函数和Rows函数的使用方法,共列举有5个实例,包含Row(A:A)、R...
  • 详解Python中for循环的使用_python

    千次阅读 2020-11-24 00:15:01
    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下for 循环本系列前面 “探索 Python,第 5 部分:用 Python 编程” 一文讨论了 if 语句和 while 循环,讨论了复合语句以及...
  • python中count函数的用法及示例

    千次阅读 2020-11-26 10:54:56
    python中count函数的用法及示例发布时间:2020-04-30 14:30:03来源:亿速云阅读:1045作者:小新今天小编给大家分享的是python中count函数的用法及示例,相信很多人都不太了解,为了让大家更加了解python中count函数...
  • python之CSV模块

    2021-01-11 19:44:43
    python之CSV模块csv文件0. csv文件介绍csv文件格式是一种通用的电子表格和...利用这个python包可以很方便对csv文件进行操作,一些简单的用法如下。1. 写入文件我们把需要写入的数据放到列表,写文件时会把列表的...
  • 详解python中executemany和序列的使用方法 一 代码 import sqlite3 persons=[ (Jim,Green), (Hu,jie) ] conn=sqlite3.connect(:memory:) conn.execute(CREATE TABLE person(firstname,lastname)) conn....
  • Python中zip函数用法

    千次阅读 2021-03-17 17:21:10
    看openstack的代码,遇到一个内建函数zip不明白其意思:# Adjust the weights in the grid by the functions weight adjustment# and sum them up to get a final list of weights.adjusted_...fn), row in zip(wei...
  • 主要介绍了Python csv模块使用方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • python里面的xlrd模块详解

    千次阅读 2021-01-14 14:23:44
    2.为什么使用xlrd模块?3.怎样使用xlrd模块?1.什么是xlrd模块?♦python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。今天就先来说一下xlrd模块:一、安装xlrd模块♦ 到python官网...
  • 在cmd命令行输入:pip install xlrd1.2 xlrd介绍:xlrd是python环境下对excel的数据进行读取的一个模板,可以进行的操作有:读取有效单元格的行数、列数读取指定行(列)的所有单元格的值读取指定单元格的值读取指....
  • heapq 模块提供了堆算法。heapq是一种子节点和父节点排序的树形数据结构。这个模块提供heap[k] <= heap[2*k+1] and heap[k] <= heap[2*k+2]。为了比较不存在的元素被人为是无限大的。... last_row = -1 for i, n
  • Python numpy 常用函数总结

    千次阅读 2021-01-12 00:26:55
    Python代码很多时候看起来就像是伪代码一样,因此你可以使用很少的几行可读性很高的代码来实现一个非常强大的想法。numpy很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、...
  • Python解析Excle文件的数据方法

    千次阅读 2020-12-16 00:31:00
    在公司里面,人力资源部每到发工资的时候就会头疼,如果公司内部有100多号员工,那么发完工资后需要给员工发送工资条的话,那么就需要截图如下图,...这个工作是循环的,死板的,那么我们就需要使用程序来解决这个...
  • python中float的用法

    千次阅读 2021-03-07 20:46:07
    python中float的比较方式print float(lastpayment)-temp,'and',float(self.pyament) if (float(l浮点数不精确,如果想要使用精确小数,请用decimal 如果要比较浮点数a和b -0.00000001 < a - b < 0.00000001这样...
  • python中range函数的使用

    万次阅读 多人点赞 2021-09-14 23:24:26
    只有当用到range对象时,才会去计算序列的相关元素 5、in与not in判断整数序列是否存在(不存在)指定的整数 6、例题: #range()的三种创建方式 '''第一种创建方式,只有一个参数(小括号只给了一个数)''' r=...
  • Python中,split()函数的使用方法,主要是能将“字符串”变成“列表”,具体方式如下: s = "1 2 3 4 5 6"#s为字符串 a = s.split(' ')#a等于s的split函数,以空格分隔开 print(a)#打印出a ['1', '2', '3', '4',...
  • Python,numpy库:cov函数中rowvar=0的含义

    千次阅读 2019-05-25 20:36:08
    from numpy import * … covMat=cov(newData,rowvar=0) 其中rowvar=0,说明传入的数据一行代表一个样本;若非0,说明传入的数据一列代表一个样本。
  • 我不确定跟随你,但是你使用DataFrame.ix选择/设置单个元素:In [79]: MOut[79]:one two three foura -0.277981 1.500188 -0.876751 -0.389292b -0.705835 0.108890 -1.502786 -0.302773c 0.880042 -0.056620 -0....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 79,169
精华内容 31,667
关键字:

python中row的用法

友情链接: nurbs_曲面拟合.rar