• Jingxiao 置顶
    2019-06-09
    思考题答案:
    很多回复说的很对,from module_name import * 会把 module 中所有的函数和类全拿过来,如果和其他函数名类名有冲突就会出问题;import model_name 也会导入所有函数和类,但是调用的时候必须使用 model_name.func 的方法来调用,等于增加了一层 layer,有效避免冲突。
     1
     67
  • jim
    2019-06-07
    from module_name import * 是导入module_name 内的所有内容,可以直接调用内部方法;import module_name,则是导入module_name,在代码中必须写成module_name.function的形式。
    
     18
  • helloworld
    2019-07-16
    本文中说在 Python 3 规范中,包目录下的__init__.py 并不是必须的,这个我想补充一下,这个__init__.py最好还是有,并且在这个文件里面通过from . import module的形式把该目录下的所有模块文件都写上,如果不这样做,我们只能通过from 包目录 import 模块 的方式来正确使用,而如果直接 import 包目录 的话,虽然import过程不会报错,但是我们在使用该包目录下的模块的时候就会报找不到模块的错误了!
    
     10
  • 书了个一
    2019-06-07
    老师端午节快乐!
    
     8
  • Kuzaman
    2019-06-21
    找到一种通用的加载环境变量的方法,很适用于 python虚拟环境virtualenvwrapper-win:
    原理:python运行时都会先去site-packages目录下寻找.pth文件,如果有就先加载里面的路径到环境变量中。
    操作:在X:\Python36\Lib\site-packages目录下增加一个 xxx.pth文件文件内容是要运行项目的绝对地址,windows操作系统记得使用 \\ 作为分隔符。
    如果项目路径中有中文,运行python会报错:“UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa in position 42: illegal multibyte sequence”。
    解决方案:修改python环境源码 X:\Python36\lib\site.py的159行,由【f = open(fullname, "r")】修改为【f = open(fullname, "r",encoding='utf-8')】
    展开
    
     4
  • Cynthia🌸
    2019-07-02
    1. 在 Python 3 规范中,__init__.py 并不是必须的,这只是python2的规范。
    2. 项目中,import可以用相对路径,是pycharm的黑魔法。自己也可以通过虚拟环境配置path实现。强烈建议一个项目用一个虚拟环境以保持纯净!
    3. import在导入时会把暴露在外面的代码都执行一遍,因此不想执行的话,请加上 if __main__ 的条件判断。
    
     3
  • Smirk
    2019-06-14
    这节不错,目录结构那个之前一直用相对路径,但是觉得不干净,也奇怪为什么pycharm可以,但没深究,终于等到老师的文字,赞
    
     3
  • enjoylearning
    2019-06-08
    作者写的都是原来疑惑的地方,如有时候要新建一个模块总是纠结于是添加文件夹还是包,怀疑加文件夹是不是不如加包规范,有时面对每个文件夹一个空的__init__.py,觉得真是不够优雅,现在好了,原来是2和3的区别,以后可以大胆的用文件夹来组织模块了。另外就是觉得python 命名模块名不能像java和.net那样以公司名.application.web.api格式,觉得还是有点别扭。

    作者回复: 哈哈对,除非是老项目维护,新项目最好使用 python 3 来构建,确定好规范后就可以大胆 coding,不用太担心兼容性问题。

    
     3
  • 秋官萧
    2019-06-07
    export PYTHONPATH="/home/ubuntu/workspace/your_projects"

    在windows系统 中 亲测无效 T_T

    作者回复: windows 的文件系统和 Linux 不太相同,学计算机科学还是尽早切换到 linux 系统吧

     1
     3
  • 2020
    2019-09-01
    我自己试了下:实际上PyCharm在程序执行的时候会将项目根目录的绝对路径以及当前执行的文件所在的绝对路径一起加到sys.path里,所以无论怎么执行都能找到模块
    
     2
  • 乘坐Tornado的线程魔...
    2019-06-15
    老师,对于文中“项目模块化”的段落,有关二维矩阵相乘运算,您给的例子是行与列维度相同的,所以代码运行没有问题;如果您试一下3 x 2的矩阵与2 x 3的矩阵相乘, 例如:[[1, 2], [3, 4], [5, 6]] 与[[5, 6, 7], [7, 8, 9]],代码则会报错(索引溢出)。

    我改写了一下mat_nul方法:
    def mat_mul(matrix_1: Matrix, matrix_2: Matrix):
        assert matrix_1.m == matrix_2.n
        n, s, m = matrix_1.n, matrix_1.m, matrix_2.m
        result = [[0 for _ in range(m)] for _ in range(n)]
        for i in range(n):
            for j in range(s):
                for k in range(m):
                    print(i, j, k)
                    result[i][k] += matrix_1.data[i][j] * matrix_2.data[j][k]
        return Matrix(result)

    我自测通过,请您帮忙验证下!不胜感激!
    展开
    
     2
  • Geek_59f23e
    2019-06-08
    class_utils.py那儿应该是reversed吧,而不是reverse。

    作者回复: 多谢,是 reversed.

    
     2
  • 上梁山
    2019-12-30
    文章中有这么一句话:“import 同一个模块只会被执行一次,这样就可以防止重复导入模块出现问题。”
    “import 同一个模块只会被执行一次”,这句话让我这个新手有点困惑。
    这里的只会被执行一次,指的是导入模块的语句只执行一次,还是指被导入的模块中的语句只执行一次。
    我相信很多向我这样的新手,都会认为是前者。
    但是,经过代码实验,这里指的是被导入的模块中的语句只执行一次。

    假如现在有main.py和foo.py两个文件,
    foo.py中内容如下:
    def bar():
        print('bar')
    print('hello')

    main.py中内容如下:
    from foo import bar
    import foo
    bar()
    foo.bar()
    执行python main.py后的结果是:
    hello
    bar
    bar
    展开

    作者回复: 好建议,这里确实没想到读者会有误解。

    
     1
  • lyt
    2019-08-08
    老师您好,Pycharm是什么呢?Pytorch,tensor这些框架都有什么不同
    
     1
  • mercy
    2019-07-31
    老师,类实例化成对象后,直接把对象当成函数调用的做法叫什么呢?
     1
     1
  • Geek_66525b
    2019-06-26
    如果使用conda, 怎么达到和Virtualenv同样的效果呢?
    
     1
  • Kuzaman
    2019-06-11
    老师,python虚拟环境使用【virtualenvwrapper-win、virtualenv】,我用的是sublimetext3它只能配置编译环境的位置(我在sublime的tools--build system--python-venv01指向了虚拟环境Venv01),但是我无法达到老师文章说的:“这样,每次你通过 activate 激活这个运行时环境的时候,,它就会自动将项目的根目录添加到搜索路径中去。”
    
     1
  • 更好的做自己
    2019-06-09
    老师,我使用anaconda配置的virtual env,在相应virtual env中找到的activate文件后加上PYTHONPATH,使用source activate激活virtual env后,echo $PYTHONPATH没有值输出,运行python main.py,依然会报ModuleNotFoundError: No module named 'proto'这个错误,使用原生Python解释器和mkvirtualenv能够成功,这是anaconda在activate时的机制不同吗?希望老师解答一下
    
     1
  • lllong33
    2019-12-05
    减少 from .. import .. 的使用,可以有效防止命名冲突。使用 imoprt 相当于加上一层标识
    
    
  • enjoylearning
    2019-12-01
    不带init.py,想用setup.py打包就不行了,这点很头疼
    
    
我们在线,来聊聊吧