首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

Python 如何传递参数, 在子函数还能有智能提示(Auto Complete)[PyCharm]

  •  
  •   wzw · 279 天前 · 1331 次点击
    这是一个创建于 279 天前的主题,其中的信息可能已经有所发展或是发生改变。

    个人开发的时候, 我平时都是用 dict [来+回]传递参数, 自己觉得比较方便. 但是没有智能提示, 感觉这个缺点很不好. 会不会有更好的解决方案? 谢谢!

    # !/usr/bin/env python
    # coding=utf-8
    import time
    
    
    # 环境: PyCharm + Python 2.7
    # 假设 main 是 web 程序的入口
    def main():
        args = {
            'time': time.time(),  # 每次访问 都获取不一样的时间[用时间来举例]
            'string': '123',
            'list': [],
            'int': 0,
            'dict': dict(),
            'more': '...',
            'return': '',  # 为了方便返回内容
        }
        test(args)  # 本文件内传递
    
        print args['return']
        print args['m']  # 这里有 Auto Complete
    
    
    def test(args):
        print args['more']  # 输入 m 的时候,没有智能提示, Auto Complete
        print args['time']  # 使用
        time.sleep(1)
        args['return'] = time.time()  # 返回内容
    
    
    if __name__ == '__main__':
        main()
    
    

    1

    22 回复  |  直到 2017-12-19 16:45:31 +08:00
        1
    wwqgtxx   279 天前 via iPhone   ♥ 1
    就算是为了执行效率和可维护性,用个 class 不就搞定了,非要用 dict
        2
    wzw   279 天前
    @wwqgtxx class 也不会提示呀,,,, 我写一个例子
        3
    xyhs2010   279 天前 via iPhone   ♥ 2
        4
    swulling   279 天前 via iPhone   ♥ 1
    不建议使用 dict 来传递参数,调用者怎么知道应该传哪些?漏了很正常

    python 已经很灵活了,没必要更灵活
        5
    wzw   279 天前
    @wwqgtxx 我写的例子有什么问题没有
        6
    Nioty   279 天前 via Android   ♥ 1
    不应该用 self 传参数吗 😂
        7
    wzw   279 天前
    @Nioty 你看一下 #5 我的回复, 如果是 class, 就用 self 传, 但是也不提示的.

    还是我理解错 你说的意思了?
        8
    billgreen1   279 天前
    @wzw
    def __init__(self, t, name):
    self.t = t
    self.name = name
        9
    wzw   279 天前
    @billgreen1 还是没有的, 是我理解错你的意思了吗?
        10
    araraloren   279 天前
    @wzw I think the editor don't know python, they just support completion of words you typed before.
        11
    abcdabcd987   279 天前   ♥ 1
    你需要 type hinting
        12
    justou   279 天前   ♥ 2
    自动过滤了 3 楼的评论么
        13
    ispinfx   279 天前 via iPhone
    传字典就是蛋疼中的蛋疼,matplotlib 就是典型一个。。
        14
    secsilm   279 天前 via Android
    namedtuple or 仅有属性的类
        15
    wzw   279 天前
    @abcdabcd987 @justou @xyhs2010 我正在看, 测试一下就知道了. 谢谢

    其他非常相关的建议,我先回复了.
        16
    wzw   279 天前
    @xyhs2010 @abcdabcd987 @justou 最新文档中 https://www.jetbrains.com/help/pycharm/type-hinting-in-pycharm.html

    最后部分 给了工具 Using Typeshed 今天办完事情回来,立刻尝试.

    好东西呀
        17
    billgreen1   279 天前
    @wzw 额,我明白你的意思了, 如果不用 type hint 的话,Python 怎么知道你的 main 函数的参数 one 到底是什么呢?
    你可以试试 type hint
        18
    xpresslink   279 天前
    def main(one: dict) -> int:
    """Python 3.5+"""
    one.



    def main(one):
    assert isinstance(one, dict)
    one.
        19
    ipwx   279 天前   ♥ 2
    PyCharm 支持从 docstring 取得类型信息。你只要不懒,按照 Sphinx 支持的格式规范写点文档注释就行了。

    比如这个例子(我用了 Google Style Docstring。你也可以选择 reStructuredText style 或者 NumPy Style )。

        20
    ipwx   279 天前   ♥ 2
    我用 Docstring 不用 Typehint 的原因主要有两点。第一,正儿八经的项目,反正 docstring 总是要写的,把类型说明顺便放到 docstring 里面也没啥不妥。第二,Python 2.x 不支持 type-hinting,我最近写的项目都是 2&3 兼容的。
        21
    hronro   279 天前
    我个人不喜欢为了迁就 IDE 来更改代码风格
        22
    wzw   278 天前
    @ipwx 你这个是我最想要的答案. 非常非常感谢.

    还给力的给了例子.
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1742 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 21ms · UTC 03:33 · PVG 11:33 · LAX 20:33 · JFK 23:33
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1