V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
4ever911
V2EX  ›  Python

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

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

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

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


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

    dir(xxx)

    新技能 Get
    wangdashuai
        14
    wangdashuai  
       2016-06-28 11:02:32 +08:00
    bpython 的补全还是很厉害的.可惜不能上图.
    est
        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 是什!么!鬼!
    eliteYang
        16
    eliteYang  
       2016-06-28 11:09:21 +08:00
    你缺少一个 IDE ,例如 pycharm ,这些东西靠大脑记不太现实
    4ever911
        17
    4ever911  
    OP
       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 的自动提示里面去看看就记起来了。
    clino
        18
    clino  
       2016-06-28 11:17:21 +08:00
    pycharm 应该比我常用的 ulipad 功能强才对, ulipad 都有这样的功能啊对于标准库来说
    ulipad 是用 python 写的,装个 wxpython 库,然后把 ulipad 源代码拿下来就能跑了
    Arnie97
        19
    Arnie97  
       2016-06-28 11:18:18 +08:00 via Android
    traitlets ?
    另外, Python 是强类型,不可与 JS 混为一谈。
    clino
        20
    clino  
       2016-06-28 11:21:47 +08:00
    @4ever911 另外 python 是动态语言,你需要转变思维,静态语言能做到的很多做不了了,就是需要你自己手工去查的
    wizardoz
        21
    wizardoz  
       2016-06-28 11:37:05 +08:00
    对于 import 的库无能为力这一条不同意,可能是你配置不对哦。
    mahone3297
        22
    mahone3297  
       2016-06-28 11:39:05 +08:00
    所以, php7 有类型要求了,逃)
    northisland
        23
    northisland  
       2016-06-28 11:47:57 +08:00
    @4ever911 =_=

    import module

    print(module.__all__)

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

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

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

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

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

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

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

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

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

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