首页   注册   登录
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

C++/C# 程序员转 Python 的困惑

  •  
  •   4ever911 · 2016-06-28 10:21:18 +08:00 · 7315 次点击
    这是一个创建于 1233 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以前一直用 Visual Studio 写 C++/C#程序, 对于这些强类型的语言, VS 很容易找到所有的类型定义,自然也在代码提示上做得很棒。 但是对于 Python , 在编写的时候,我总需要旁边再放一台电脑,随时要查询某个对象的方法和属性以及如何去调用。 虽然我已经下载了 PyCharm 作为IDE,对我自己编写的类型以及函数提示还行,但是对于 import 的库,以及他们的返回值类型好像就无能为力了。

    难道作为 Python , JS 这些弱类型的语言,大家编写代码都是靠脑袋来记的吗?是不是我错过了什么。。。。。。
    68 回复  |  直到 2016-07-01 09:54:30 +08:00
        1
    lxian2   2016-06-28 10:23:59 +08:00
    同感
        2
    WangYanjie   2016-06-28 10:27:39 +08:00
    有代码提示的功能,比如说 jedi ,不过讲实话的话,我是靠记的
        3
    hyq   2016-06-28 10:30:39 +08:00
    ipython 之类的交互界面,创建对象后,可以动态获取对象上的方法
        4
    practicer   2016-06-28 10:31:08 +08:00   ♥ 1
    我一般把标准库 pdf 格式的文档下载下来,写代码时遇到不记得了随时查,平时没事时也常翻,不知道这姿势正不正确
        5
    exoticknight   2016-06-28 10:31:29 +08:00
    多用,熟悉起来就行
        6
    SpicyCat   2016-06-28 10:38:12 +08:00
    > 难道作为 Python , JS 这些弱类型的语言,大家编写代码都是靠脑袋来记的吗?是不是我错过了什么
    是的,不过也不全是。 Python , JS 的代码提示是不可能做到像 Java , C/C++, C# 那种级别的。但是很多 IDE 也提供了部分代码提示,就是不够强罢了。
    一般是记个大概,用的时候查。
        7
    justou   2016-06-28 10:40:02 +08:00   ♥ 1
    @practicer
    一般是打印出来放在枕头下面, 寂寞的时候翻一翻 2333
        8
    lonelinsky   2016-06-28 10:45:39 +08:00
    深感如此,作为用 vim 写 python 的一员,用了 pep8 , pyflakes , pydoc , py.test 插件,能提示一些基本的错误,如定义未使用,语法错误, import 未使用等,但还是经常发现有些方法或者属性写错了(属性名写错,对象层级写错),还经常要到运行的时候才能发现(嗯,现在的代码测试用例写得比较少),很是不爽 =。=
        9
    northisland   2016-06-28 10:46:47 +08:00   ♥ 1
    print(function.__doc__)
    我的做法
        10
    4ever911   2016-06-28 10:50:32 +08:00   ♥ 1
    @northisland

    >>>import XXX
    >>>print(xxx.__doc__)
    None


    ......
        11
    afpro   2016-06-28 10:53:23 +08:00
    有个东西叫 type hint
        12
    clino   2016-06-28 10:56:41 +08:00   ♥ 1
    @4ever911
    >>> import os
    >>> print dir(os)
        13
    4ever911   2016-06-28 10:59:52 +08:00
    xxx.__doc__

    dir(xxx)

    新技能 Get
        14
    wangdashuai   2016-06-28 11:02:32 +08:00
    bpython 的补全还是很厉害的.可惜不能上图.
        15
    est   2016-06-28 11:05:11 +08:00   ♥ 2
    LZ 的意思是比如 def my_func(obj_a, obj_b) 然后你写 my_func 的时候并不能知道 obj_a 或 obj_b 是什!么!鬼!
        16
    eliteYang   2016-06-28 11:09:21 +08:00
    你缺少一个 IDE ,例如 pycharm ,这些东西靠大脑记不太现实
        17
    4ever911   2016-06-28 11:16:49 +08:00
    @est

    是的, 还有, 比如 obj = some_func (xx), 然后我拿着 obj 发愣, 只能去查资料。 如果是以前的 VS 的写法, obj 肯定是有类型的, IDE 会提示我 OBJ 包含哪些方法和类,基本看看名字就知道怎么用了。

    而碰到 Python ,我不光第一次需要去查询, 以后如果记得不清晰准确,还得再次去查询。 而 C++这种,我只要记一个大概, 比如我记得有个 caption ,我不用太记清是 get_caption, 还是 getcaption or getcaptionname.....到 ide 的自动提示里面去看看就记起来了。
        18
    clino   2016-06-28 11:17:21 +08:00
    pycharm 应该比我常用的 ulipad 功能强才对, ulipad 都有这样的功能啊对于标准库来说
    ulipad 是用 python 写的,装个 wxpython 库,然后把 ulipad 源代码拿下来就能跑了
        19
    Arnie97   2016-06-28 11:18:18 +08:00 via Android
    traitlets ?
    另外, Python 是强类型,不可与 JS 混为一谈。
        20
    clino   2016-06-28 11:21:47 +08:00
    @4ever911 另外 python 是动态语言,你需要转变思维,静态语言能做到的很多做不了了,就是需要你自己手工去查的
        21
    wizardoz   2016-06-28 11:37:05 +08:00
    对于 import 的库无能为力这一条不同意,可能是你配置不对哦。
        22
    mahone3297   2016-06-28 11:39:05 +08:00
    所以, php7 有类型要求了,逃)
        23
    northisland   2016-06-28 11:47:57 +08:00
    @4ever911 =_=

    import module

    print(module.__all__)

    有是 module 内容的提示,,但不是所有库规范,楼主的问题我也存在,摸索中~~~~
        24
    est   2016-06-28 12:12:47 +08:00
    @4ever911 自从用了 py 之后我的记忆力好起来了
        25
    Owenjia   2016-06-28 12:18:20 +08:00
    看看 https://www.python.org/dev/peps/pep-0484/ ?不过现在还很不完善。
        26
    jzp113   2016-06-28 12:18:55 +08:00
    考记性的。有时候自己写的函数经常忘记返回是啥
        27
    334132462   2016-06-28 12:22:53 +08:00
    请用 VS CODE
        28
    wangxn   2016-06-28 12:36:14 +08:00 via Android
    help(func)
        29
    felixzhu   2016-06-28 12:44:11 +08:00
    写久了大部分都能记住,不行就开一个 console 看一下 help 就行

    个人偶尔也会开一个 dash
        30
    onlyice   2016-06-28 12:46:52 +08:00 via Android
    推荐下 DevDocs ,用什么查什么
        31
    hjc4869   2016-06-28 12:49:16 +08:00 via iPhone
    嗯,所以现在流行瞧不起 Java/C#,瞧不起 IDE , js 学个一知半解玩下 linux 甚至直接买台乞丐版 mac 就出来圣战(光速逃
        32
    eriale   2016-06-28 13:12:48 +08:00
    请点击 File->Settings->Project->Project Interpreter, 在右边选择你现在使用的虚拟环境,点击保存。
    马上你就可以看到各种补全了。
        33
    zhuangzhuang1988   2016-06-28 13:16:29 +08:00
    转回去吧...
        34
    jeffersonpig   2016-06-28 13:23:05 +08:00
    然后 python 的文档,函数说明好像都不说清楚返回值是个啥……虽然是弱类型语言,但是函数返回的东西其实还是有类型的吧,不然谁知道该怎么用返回值……难道是我看文档的方式不对?
        35
    hwsdien   2016-06-28 13:29:36 +08:00
    装个 dash, 装个 ipython, dir 一下
        36
    callofmx   2016-06-28 13:32:12 +08:00
    python 不是弱类型语言,python 是动态类型,这是基础吧,这个概念不明确还写个毛

    我一般遇到问题会去 REPL 测试下 然后回来继续写
    常用库都能记住,基本上返回的都是基本类型,或者和基本类型有相同的用法,比如 strip,切片之类的
    记不住就去查 DASH

    如果 lz 实在是不习惯,还是转回去吧
        37
    sjtlqy   2016-06-28 13:49:27 +08:00
    @zhuangzhuang1988 直接转汇编去吧
        38
    jixiangqd   2016-06-28 13:50:23 +08:00
    pycharm 今年的新功能--> type hint
        39
    menc   2016-06-28 14:05:56 +08:00
    python 是强类型,但是是动态类型,要注意区分
        40
    tonghuashuai   2016-06-28 14:08:25 +08:00
    PyCharm 和 Vim 都有自动补全啊,但是貌似很多人用 Vim 不用提示,纯手写。也推荐尽量不要依赖自动补全,如果遇到有人让你在白板写代码的时候不至于太尴尬。

    LZ 说的这个问题呢,主要原因还是不熟悉,试想大家在学打字的时候,刚开始学都会经历一个一指禅的阶段,但是学会了以后就不需要去眼看键盘了,而且也应该不是靠脑子去记每个键位吧,是下意识的。所以,孰能生巧。

    LZ 加油,我也是从 C# 转到 Python 的,以前也用 PyCharm ,现在用 Vim ,不讨论 IDE 和 Vim 到底谁好的问题,各有好处罢了,只是学习阶段使用 Vim (不要配置自动提示) 会有效的提高自己的水平。
        41
    kier   2016-06-28 14:12:28 +08:00
    随便吐个槽,遇到好多人都说 python 是弱类型!我已经累到不想反驳了
        42
    imn1   2016-06-28 14:16:44 +08:00
    所以 python 手册里面有专门章节讲述 doc ,三引号不光是一个注释
        43
    ninjadq   2016-06-28 14:24:48 +08:00
    有一些补全的工具,但是很多时候还是靠记,很多时候旁边还需要开一个 ipython
        44
    9hills   2016-06-28 14:28:09 +08:00
    动态类型就是这样,不到运行的时候不知道是什么类型,很多时候代码提示搞不了的
        45
    9hills   2016-06-28 14:30:30 +08:00
    举个栗子:

    def (x):
    a=classA()
    if x > 5:
    a = classB()

    a.xxxx # 此时来个代码提示看看,是提示 classA 里的方法呢,还是提示 classB 里的方法呢。。。
        46
    Taojun0714   2016-06-28 15:27:47 +08:00
    python 是强类型动态语言
    python 是强类型动态语言
    python 是强类型动态语言
        47
    itlynn   2016-06-28 15:35:03 +08:00 via iPhone
    个人用 Sublime ,另再开一个 bpython 交互,遇到不熟悉的类库就在 bpython 输入,会动态提示属性及方法,了解再进行使用。
        48
    lzhr   2016-06-28 15:39:39 +08:00
    VS 上不是有 PTVS 吗
        49
    lyroge   2016-06-28 15:42:38 +08:00
    c# 转过来的, 用的 sublime 还不错哦
        50
    ChiangDi   2016-06-28 15:42:46 +08:00 via Android
    用 dash
        51
    tairan2006   2016-06-28 15:52:04 +08:00
    python 是强类型语言啊

    熟能生巧。
        52
    crysislinux   2016-06-28 15:54:36 +08:00
    pycharm 我映像中可以在这软件里下载常用库的定义的
        53
    PublicFourWord   2016-06-28 16:21:50 +08:00
    site:v2ex.com/t IDE 提示 函数
        54
    sevncz   2016-06-28 16:29:13 +08:00
    有的时候直接 pycharm 点进去看实现
        55
    hello2t   2016-06-28 16:48:06 +08:00
    说实话,我也是靠记的,不过我是写 php 的。。。
        56
    SuperFashi   2016-06-28 17:33:34 +08:00 via Android
    import 的库 pycharm 怎么会不显示呢?难道我们用的不是一个 pycharm ……
    就算没有,按住 alt 点一下就可以直接去看实现。
    在没有 ide 的情况下:
    xxx.__doc__
    dir(xxx)
        57
    clorts   2016-06-28 17:41:38 +08:00
    为何不滚回 c++呢:)
        58
    cexia   2016-06-28 18:08:31 +08:00
    宇宙第一 IDE 的 python 模块不是有楼主想要的功能吗?
        59
    kslr   2016-06-28 18:50:51 +08:00 via Android
    也许你需要另一个显示器看文档
        61
    ideascf   2016-06-28 18:58:30 +08:00
    看楼上的这个连接,有说如何给自定义的函数、类等等,增加类型提示。 我目前就这样使用,自己写好参数以及返回值的类型后,提示功能和自带的类 /函数就没有什么区别了。
        62
    billlee   2016-06-28 22:36:34 +08:00
    python 是强类型
    我一般用 devdocs.io 查文档
        63
    aabbccli   2016-06-29 00:44:51 +08:00
    dir(), help(), type()
        64
    ctftemp   2016-06-29 01:48:43 +08:00 via Android
    @est 加断言, assert isinstance(obj, class)
    后面再用到 obj 就能自动补全出 obj 的成员函数和属性了。自己写的函数,当然知道参数的类型该是什么。
        65
    lightening   2016-06-29 06:10:15 +08:00 via iPhone
    @4ever911 那就不要起 object 这种变量名呀。只要变量名合理就没什么问题。

    另外纠正一下楼主, Python 是强类型语言,而 C 是弱类型语言。
        66
    loryyang   2016-06-29 09:36:33 +08:00
    能记住就记住,记不住就去 ipython 里面跑一下,查一查,如果要实现一个小功能,直接 Google 一下
        67
    maowu   2016-06-29 13:15:02 +08:00
    vscode 加一个 python 语言的插件,也有不错的效果
        68
    jiangbingo   2016-07-01 09:54:30 +08:00
    从 C 转过来的,感觉最不能忍受的是 python 参数传递。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2517 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 29ms · UTC 15:23 · PVG 23:23 · LAX 07:23 · JFK 10:23
    ♥ Do have faith in what you're doing.