python-模块导入的几种格式及用法、if __name__==‘__main__‘的妙用

本文介绍了Python中模块的导入方式,包括import、import as、from...import等,并讲解了`if __name__ == '__main__'`的使用场景和作用。同时,文章涵盖了推导式、生成器、迭代器的概念和用法,以及如何通过函数创建生成器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块

test_m为模块文件,m为主文件名
将一个完整的程序分解成一个一个的小模块
作用:
1、方便开发和维护
2、模块可以复用
模块的导入方式:
1、import 模块名
2、import 模块名 as 别名 (当模块名称复杂或者不便于记忆是采用)
test_m

print('这是我的第一个模块')

m

import test_m
'''
这是我的第一个模块
'''

__name__的使用:
如果在模块test_m中出现,那么在主文件中则可以获取模块的名称,如果在主文件中使用,则提示当前文件是主文件.
test_m:

print('__name__')

m:

import test_m
'''
test_m
'''

主文件与模块的区别:直接run的文件是当前主文件,通过import导入的则是模块

模块的使用

主文件使用模块中的变量,格式:模块名.变量名
test_m:

a = 1
b = 2

m:

import test_m
print(test_m.a,test_m.b)
'''
1 2
'''

主文件使用模块中的函数,格式:模块名.变量名
test_m:

def test1():
    print('test1')
def test2():
    print('test2')

m:

import test_m
test_m.test1()
test_m.test2()
'''
test1
test2
'''

主文件使用模块中的类,格式:模块名.对象名
test_m:

class perpon:
    def __init__(self):
        self.name = '葫芦娃'
p = perpon

m:

import test_m
p = test_m.perpon()
print(p.name)
'''
葫芦娃
'''

主文件引入模块中的部分内容:
test_m:

class perpon:
    def __init__(self):
        self.name = '葫芦娃'
p = perpon
a = 1
b = 2
def test1():
    print('test1')

m:

from  test_m import a
from  test_m import test1
test1()
print(a)
'''
test1
1
'''

from test_m import a
from test_m import test1
合并:from 模块名 import 变量,函数,类
根据需要进行引用,可以增加运算效率
m:

from  test_m import *#主文件中用到哪个,就自己调用哪个,与全部引入有一定区别
test1()
print(a)

import 模块名与from 模块名 import *在主文件中的位置是有影响
test_m:

class perpon():
    def __init__(self,name):
        self.name = name
p = perpon('葫芦娃')
def test1():
    print('test1')
a = 1
b = 2

m:

a = 4
import test_m
print(a)
'''
4
此时主文件中的a的值是对输出有影响的
'''

**如果使用from test_m import * 来引用,跟from test_m import *在a的前后有一定关系的
如果a在from test_m import 下面,则会影响输出的a的值,如果a在from test_m import 上面,则对输出a的值是没有影响的,不管对输出是否有影响,总有一个a的值是没有输出的,鉴于此需要引入指定模块中变量的引入

特定引用模块中内容:
格式:from 模块名 import 变量名 as 别名
test_m:

class perpon():
    def __init__(self,name):
        self.name = name
p = perpon('葫芦娃')
def test1():
    print('test1')
a = 1
b = 2

m:

a = 4
from test_m import a as new_a
print(a)
print(new_a)
'''
4
1
'''

这样主文件和模块中a的值都不影响
if namemain’:妙用:在当前文件中可以正常执行,用于测试当前文件执行是否有误,但是被其他文件引用后,if namemain’:里面的代码则不会被执行
模块导入的总结:
1、import xxx
2、import xxx as yyy
3、from xxx import yyy,zzz,bbb
4、from xxx import *
5、from xxx import yyy as zzz

推导式

以列表推导式为例,因为列表使用非常广泛
语法:[变量 for 变量 in 旧列表] 或者 [变量 for 变量 in 旧列表 if 条件判断]

names = ['jerry','amy','tony','james','anny','mcheal','abc','nba']
r = [name for name in names if len(name)<=3]
print(r)
'''
['amy', 'abc', 'nba']
'''
names = ['jerry','amy','tony','james','anny','mcheal','abc','nba']
r = [name.capitalize() for name in names if len(name)<=3]#首字母大写
print(r)
'''
['Amy', 'Abc', 'Nba']
'''

DEMO::讲1-100之间能被3整除的,组成一个新的列表

r = [n for n in range(1,101) if n%3==0]
print(r)

生成器

通过推导式把符号要求的所有元素都会生成,这样就会消耗资源,生成器就是解决这样的问题,需要用到哪些就生成哪些,即一边循环一边使用的的机制
1、通过推导式生成生成器
2、格式是推导式,但是最外层是括号()
3、生成器获取元素方式
1、print(变量名.next())
2、print(next(变量名))

r = (n*3 for n in range(6) if n <5)
print(r.__next__())
print(next(r))
'''
0
3
'''

通过函数获得生成器

只要在函数中出现yield关键字,那么这个函数就是函数生成器

def fn():
    num = 0
    while True:
        num +=1
        yield num#生成器函数
a = fn()
print(a.__next__())
print(next(a))

迭代器

迭代:获取元素的一次过程
可迭代:可迭代对象(列表、集合、字典、字符串、元组、生成器等等)
迭代器:可以被next()函数调用并不断返回下一个值的对象称之为迭代器(iterator)
可迭代对象不一定是迭代器,但迭代器一定是迭代对象,
1、生成器是可迭代的,也是迭代器
2、列表是可迭代的,但是不是迭代器
通过iter()函数可以将可迭代的变成迭代器

from collections import Iterable
a = [1,2,3]
print(next(a))
'''
TypeError: 'list' object is not an iterator
'''

转换后:

from collections import Iterable
a = [1,2,3]
a = iter(a)#将可迭代的转换成可迭代器
print(next(a))
'''
1
'''

总结:迭代器主要分为2部分(一部分是可以直接使用的可迭代对象,一部分是需要通过iter()函数转换成迭代器的–>例如元组、列表等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值