python-import相关内容

76 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情


大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:



import语句

import语句导入模块, 可以一次import一个, 或者一次import多个->用,分割

#方式1:
import os
import sys
​
#方式2:
import os,sys #用逗号分割

推荐使用第一种方式, 这样代码看起来更好看一些


import语句的顺序: 我们推荐按 Python标准库, Python第三方库, 应用程序自定制模块 的顺序来import, 来提高我们代码的可读性.

模块也是一个对象, 也有作用域这样的概念. 在函数内部import, 那么这个模块的作用域就是在这个函 数内.

例子:

def func():
    import sys
    print('In func',sys.argv)   #In func ['E:/Python文件存储/Class01.py']
func()
print('Out func',sys.argv)  #报错 NameError: name 'sys' is not defined

既然模块也是一个对象, 那么也可以给这个对象赋值(相当于定义别名).

import os.path
p = os.path #起别名
print(p.exists('add.py'))   #add.py这个文件是否存在  True

这样可以一定程度上简化我们的代码(敲一个字符p肯定比敲一串字符os.path要方便).


import as语句

前面我们使用赋值的方式, 给模块起了一个很短的别名. 实际上使用import-as可以更方便的完成这个动作

import os.path as p
print(p.exists('add.py'))   #add.py这个文件是否存在  True

from-import 语句

import语句是直接导入一个模块. 而有时候我们只需要用到模块中的某一个或几个函数, 就可以使用from- import

from-import相当于把模块中的名字引入了当前文件的命名空间中.可以直接使用导入的函数

from os.path import exists
print(exists('add.py')) #True

可以使用 from module import *的方式将module模块中的所有名字都导入进来. 不推荐这么用.

*:通配符


导入模块意味着 "被执行"

模块导入意味着这个模块 "被执行" , 也就是说所有顶层的代码(无缩进部分的代码)都会被执行到. 这通常包括函数的定义和全局变量的定义.

例子:

add.py 的内容:

'''
定义两数相加的函数
'''
def _Add(x,y):
    return x+y
​
print("In Add函数内部")

test.py的内容

import add
#执行结果:
In Add函数内部

这往往不是我们期望的结果(比如导入模块是打印了一些奇怪的日志), 我们只是想使用模块中的一些函数和变量. 因此往往我们在实现一个模块时, 只将函数定义/类定义放到顶层代码中.