推荐学习书目
› 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
krisbai
V2EX  ›  Python

请教: Python 使用任意数量的关键字实参

  •  
  •   krisbai · Sep 25, 2018 · 2149 views
    This topic created in 2962 days ago, the information mentioned may be changed or developed.
    ###代码###
    def build_profile(first,last,**user_info):
    profile = {}
    profile['first_name'] = first
    profile['last_name'] = last
    for key,value in user_info.items():
    profile[key] = value
    return profile


    user_profile = build_profile('albert','einstein',location='princeton', field='physics')
    print(user_profile)

    已上讲道理应该打印:{'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton','field':'physics'}
    但是实际只有:{'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton'},没任何报错。Python 版本:3.6.5
    ysc3839
    ysc3839
    Sep 25, 2018❤️1
    1
    https://paste.ubuntu.com/p/NkrJcBw92m/ 这个代码试了一下没问题……
    krisbai
    krisbai
    OP
    Sep 25, 2018
    2
    @ysc3839 谢谢,不知道为啥,我这边打印出来就是少了以后一对键值。
    est
    est
    Sep 25, 2018❤️1
    3
    django 里的? django 里的 field 可能是保留字段。
    loryyang
    loryyang
    Sep 25, 2018❤️1
    4
    试下把 field 删掉呢? location 还会有吗?
    krisbai
    krisbai
    OP
    Sep 25, 2018
    5
    @est 不是 django
    krisbai
    krisbai
    OP
    Sep 25, 2018
    6
    @loryyang 跟这个没关系吧。**user_info 是可以传入多个实参的。
    5oiR5piv5YK76YC8
    5oiR5piv5YK76YC8
    Sep 25, 2018❤️1
    7
    代码没问题的,我猜你的 return 写错了位置
    Sylv
    Sylv
    Sep 25, 2018 via iPhone❤️1
    8
    楼上猜的很可能是真相。
    metamask
    metamask
    Sep 25, 2018❤️1
    9
    def build_profile(first,last,**user_info):
    profile = {}
    profile['first_name'] = first
    profile['last_name'] = last
    for key,value in user_info.items():
    profile[key] = value
    return profile
    user_profile = build_profile('albert','einstein', location='princeton', field='physics')
    print(user_profile)
    {'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton', 'field': 'physics'}
    def build_profile(first,last,**user_info):
    profile = {}
    profile['first_name'] = first
    profile['last_name'] = last
    for key,value in user_info.items():
    profile[key] = value
    return profile
    user_profile = build_profile('albert','einstein', location='princeton', field='physics')
    print(user_profile)
    {'first_name': 'albert', 'last_name': 'einstein', 'location': 'princeton'}
    loryyang
    loryyang
    Sep 25, 2018❤️1
    10
    @krisbai 这个错误明显很不正常,那你显然要多试试各种可能性,通过错误的表现来排查问题
    如果你觉得一切正常,那怎么排查的出问题呢?多打点 print,多用几组数据测一下,而不是上来论坛提问。
    这种问题十有八九是你犯了一个非常愚蠢的错误,但是没有注意到。与其让我们来猜,还不如你多去自己调试下。
    我也不想多说了,你自己体会下吧
    krisbai
    krisbai
    OP
    Sep 25, 2018
    11
    @loryyang 受教了
    krisbai
    krisbai
    OP
    Sep 25, 2018
    12
    @Marmot 大神猜对了,犯了低级错误。
    metamask
    metamask
    Sep 25, 2018❤️1
    13
    上面缩进不了,

    检查是不是把 return 写进 for 里面了。

    另外假如只是把参数又传出来,直接这样写就好:
    profile.update(**user_info)
    krisbai
    krisbai
    OP
    Sep 25, 2018
    14
    @freakxx 已解决,谢谢答复。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5652 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 03:06 · PVG 11:06 · LAX 19:06 · JFK 22:06
    ♥ Do have faith in what you're doing.