推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
20032009
V2EX  ›  Python

谁能帮忙解答 Python 很神奇的问题?

  •  
  •   20032009 · May 15, 2018 · 4371 views
    This topic created in 2945 days ago, the information mentioned may be changed or developed.

    def run(a,b,c): if a == b : c a = 1 b = 1 c = print('1') run(a,b,c)

    1、为什么没有报错? 2、执行过程中到底执行了哪个 c ?

    23 replies    2018-05-16 08:02:42 +08:00
    zhanglintc
        1
    zhanglintc  
       May 15, 2018
    这个代码咋看啊...
    20032009
        2
    20032009  
    OP
       May 15, 2018
    def run(a,b,c):
    if a == b :
    c
    a = 1
    b = 1
    c = print('1')
    run(a,b,c)
    blodside
        3
    blodside  
       May 15, 2018
    >>> def run(a,b,c): if a == b : c a = 1 b = 1 c = print('1') run(a,b,c)
    File "<stdin>", line 1
    def run(a,b,c): if a == b : c a = 1 b = 1 c = print('1') run(a,b,c)
    ^
    SyntaxError: invalid syntax
    20032009
        4
    20032009  
    OP
       May 15, 2018
    def run(a,b,c):
    if a == b :
    c
    #
    a = 1
    b = 1
    c = print('1')
    run(a,b,c)
    ballshapesdsd
        5
    ballshapesdsd  
       May 15, 2018   ❤️ 1
    print 函数返回值是 None。。
    magicO
        6
    magicO  
       May 15, 2018
    同楼上,
    语法错误
    magicO
        7
    magicO  
       May 15, 2018
    shell 里报错,pycharm 不报错,应该是 ide 做了什么事情
    @magicO
    20032009
        8
    20032009  
    OP
       May 15, 2018
    格式是这样(·是空格):

    def run(a,b,c):
    ····if a == b :
    ········c
    a = 1
    b = 1
    c = print('1')
    run(a,b,c)

    我的上面正常运行,而且打印出 1
    magicO
        9
    magicO  
       May 15, 2018
    @magicO 我的锅,用错版本。shell 里也正常。没毛病啊,执行的就是 print("1")
    rabbbit
        10
    rabbbit  
       May 15, 2018
    holajamc
        11
    holajamc  
       May 15, 2018
    c 就是你定义的 print('1') 呀,函数的参数可以是另外一个函数)
    magicO
        12
    magicO  
       May 15, 2018
    11L 正解,没毛病啊
    20032009
        13
    20032009  
    OP
       May 15, 2018
    在执行 6 行时,c = print('1') 这个地方 print 执行了
    在 run()里面的 c 也应该被执行啊,那应该打印出两个 1
    20032009
        14
    20032009  
    OP
       May 15, 2018
    @magicO 在执行 6 行时,c = print('1') 这个地方 print 执行了
    在 run()里面的 c 也应该被执行啊,那应该打印出两个 1
    rabbbit
        15
    rabbbit  
       May 15, 2018   ❤️ 1
    你是不是对函数 /变量有什么误解
    调用一个函数的格式方式: 函数名([参数])
    print('1')返回的是 None,不是一个函数
    magicO
        16
    magicO  
       May 15, 2018
    @20032009 没有啊,一旦赋值就不是那样了。 虽然我也不懂更深层的原理,但似乎第一天写 python 就感觉应该是这样。搬板凳听大佬解释
    freeminder
        17
    freeminder  
       May 15, 2018
    看的我这个难受,你要是说"执行了 print", 那就只有 c = print('1') 这一句执行了 print。c 在这句之后就是一个函数调用的返回值。你在 run 里面写的那个 c,可能是想要完成执行一个函数的事情?但是就算 c 在 run 中是一个函数引用-比如 lambda 创建的,你也得给人家一个括号吧-c()。
    FrailLove
        18
    FrailLove  
       May 15, 2018
    a = 1;
    b = 1;
    print('1') 任何函数不 return 默认返回 None 打印出 1 后 c= None
    执行 run(1 ,1 ,None) 什么都不做
    clino
        19
    clino  
       May 15, 2018 via Android
    为什么不用 gist 贴代码?
    20032009
        20
    20032009  
    OP
       May 15, 2018
    谢谢大家,问题解决。打算入编程坑,努力成为大神中......
    whoami9894
        21
    whoami9894  
       May 15, 2018 via Android
    c 被赋值为 print 函数的返回值,为 none。
    如果 c 被赋值为函数的话后面得有()调用函数操作符
    MartinWu
        22
    MartinWu  
       May 15, 2018
    c 是 print("1")的返回值,也就是 None。并不是这个语句本身。
    1daydayde
        23
    1daydayde  
       May 16, 2018 via iPhone
    貌似有个标准错误输出流 了解一下?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2936 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 64ms · UTC 12:52 · PVG 20:52 · LAX 05:52 · JFK 08:52
    ♥ Do have faith in what you're doing.