C++/C# 程序员转 Python 的困惑 - V2EX
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 9320 次点击
    这是一个创建于 3393 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以前一直用 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 里的方法呢。。。
    7wN5407klUw768m0
        46
    7wN5407klUw768m0  
       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     Solana     2972 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 00:32 PVG 08:32 LAX 17:32 JFK 20:32
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86