模块和内置函数
?
模塊和內置函數
一、模塊的使用
1.什么是模塊
模塊實質上就是一個python文件,它是用來組織代碼的,意思就是說把python代碼寫到里面,文件名就是模塊的名稱,test.py test就是模塊名稱
2.什么是包?
包,package本質就是一個文件夾,和文件夾不一樣的是它有一個__init__.py文件,包是從邏輯上來組織模塊的,也就是說它是用來存放模塊的,如果你想導入其他目錄下的模塊,那么這個目錄必須是一個包才可以導入。
3.模塊的導入:導入模塊的本質,就是把python文件拿過來執行一次。
實際上就是把該模塊的代碼賦值給模塊名,也就是module.py里面所有的代碼,賦值給了module這個變量,如果是from?module?import?fun,就是把module打開,把module里面的fun方法拿過來使用
Eg:model1.py文件中的內容如下
def run():print('molde模塊調用')
def run1():
print('molde1模塊調用')
def run2():
print('molde2模塊調用')
name=5 1) 導入方式一:導入模塊,調用模塊中的函數,注意調用方式 import model1 #導入模塊 model1.run1() 返回結果: molde1模塊調用 2)導入方式二:只導入某個函數的時候 from model1 import run,run1
run()
run1() 返回結果: molde模塊調用 molde1模塊調用 3)導入方式三: 導入該模塊中的所有方法,慎用 from model1 import *
run()
run1() 返回結果: molde模塊調用 molde1模塊調用 4)導入方式四:可以導入變量 from model1 import name
print(neme) 返回結果: 5 5)?方式五:執行其他目錄下的py文件
Python3里py文件只要是在文件夾就行了,在python2里面, 必須是在一個包里面,包和文件夾的區別就是包下面有個__init__.py,如果你要導入其他文件夾下面的python文件,那么必須是一個包,python2里面跨目錄執行的話,是從有個__init__.py文件的包里才可以導入其他目錄下的python文件
直接在pycharm運作
from day4.set1 import hhh
 hhh()
注意:導入其他目錄下的py文件的時候,直接用pycharm可以運行,在命令行執行會報錯:
因為導入模塊的時候,python首先在當前目錄下去找這個模塊,如果在當前目錄下沒有找到這個文件的話,那么就去環境變量里面的目錄找,環境變量就是用來讓你在任意一個目錄都可以使用這個命令,在使用pycharm可以直接運行,是因為pycharm自動將要執行的文件所在的目錄加到了環境變量里面了,而命令行是沒有的,在命令行執行就要手動添加了 通過查看環境變量,確定所在目錄是否在環境變量里面:import sys
 print(sys.path)#看系統環境變量
from day4.set1 import hhh
hhh()?
二、內置函數
1.all:判斷可迭代的對象里面的值是否都為真 print(all([1,2,3,0])) #=False:print(all([1,2,3,1])) #=True 2. any判斷可迭代的對象里面的值是否有一個為真 print(any([0,0,0,0,0])) #= False
print(any([0,0,0,0,1])) #=True 3.bin十進制轉二進制 print(bin(10))# =0b1010
print(bin(12)) #0b1100 4. 函數都是強制類型轉換 print(bool('s'))#=True把一個對象轉換成布爾類型
print(bool(0))#=False int()#整形、float()#小數、str()#字符串、dict()#字典、list()#列表、set()#集合、tuple()#元組 5. callable判斷傳入的對象是否可調用 def func():
pass
print(callable(func))
返回結果:
True
6. chr打印數字對應的ascii
print(chr(98)) # =b 7. 打印字符串對應的ascii碼 print(ord('b'))#=98 8. dict強轉為字典 print(dict(a=1,b=2))#轉換字典返回結果:
{'b': 2, 'a': 1}
9. dir打印傳入對象的可調用方法 print(dir('a')) #字符串a可調用的方法['__add__', '__class__', '__contains__', '__delattr__', '__dir__'…..]
10. eval執行python代碼,只能執行簡單的,定義數據類型和運算
print(eval('1+2')) #=311. exec執行稍微復雜的python代碼
print(exec('def a():pass'))?
12. filter根據前面的函數處理邏輯,依次處理后面可迭代對象里面的每個元素,返回true保存def func(num1):
 ??? return num1
 print(list(filter(func,[0,1,2,3,4])))#在python3里面這么用是沒問題
print(filter(func,[0,1,2,3,4]))#在python2里面這么用是沒問題
返回結果:[1, 2, 3, 4]
13. mape根據前面的函數處理邏輯,依次處理后面可迭代對象里面的每個元素,保存前面函數返回的所有結果def func(num1):
 ??? return num1
 print(list(map(func, [0,1, 2, 3, 4])))#在python3里面這么用是沒問題
返回結果:[0, 1, 2, 3, 4]
? 14. globals返回程序內所有的變量,返回的是一個字典,函數里面的局部變量不會返回print(globals())
返回結果:
{'__cached__': None, '__file__': 'I:/第五周/第四周作業/內置函數.py', '__package__': None, '__doc__': None, '__builtins__': <module 'builtins' (built-in)>, '__spec__': None, '__name__': '__main__', '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000026C1D689B0>, 'func': <function func at 0x00000026C1DCE378>} 15.locals返回局部變量def func(num1):
 ??? name = '88'
 ??? print(locals())
 ??? print(globals())
 ??? return num1
 func(11)
返回結果:
{'name': '88', 'num1': 11}
{'__doc__': None, '__spec__': None, 'func': <function func at 0x0000001E3988E378>, '__package__': None, '__file__': 'I:/第五周/第四周作業/內置函數.py', '__cached__': None, '__builtins__': <module 'builtins' (built-in)>, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000001E394C89B0>, '__name__': '__main__'}
16.max取列表中的最大值print(max(111,12,13,14,16,19))#=111取最大值
17. round取幾位小數,會四舍五入print(round(11.1198,2))#=11.12
18. sorted排序print(sorted([2,31,34,6,1,23,4],reverse=False))#升序
返回結果:
[1, 2, 4, 6, 23, 31, 34]
print(sorted([2,31,34,6,1,23,4],reverse=True))#降序
返回結果:
[34, 31, 23, 6, 4, 2, 1]
19. sorted按照字典的key排序dic={3:4,7:8,1:2,5:6}
 print(sorted(dic.items()))#
返回結果:
[(1, 2), (3, 4), (5, 6), (7, 8)]
三、? random模塊
import random,string
 print(random.random())# =0.13472586128785213隨機浮點數,默認取0-1,不能指定范圍
print(random.randint(1,20)) #=16隨機整數
print(random.randrange(1,20))#=15隨機產生一個range
print(random.choice('x23serw4'))#=4隨機取一個元素
print(random.sample('hello',2))#=['o', 'l']從序列中隨機取幾個元素
print(random.uniform(1,9))#=2.068976762957055隨機取1-9之間的浮點數,可以指定范圍
x = [1,2,3,4,6,7]
 random.shuffle(x)#=[6, 1, 7, 3, 4, 2]洗牌,打亂順序,會改變原list的值
print(x) #=[6, 1, 7, 3, 4, 2]
 print(string.ascii_letters+string.digits)#=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789所有的數字和字母
注意:randrange和randint都是從一個范圍內隨機取一個值,區別是randrange是顧頭不顧尾的,randint可以取所有的值。
四、json模塊
json處理 json是一種所有語言中都通用的key-value數據結構的數據類型,很像python中的字典,json處理使用json模塊,json模塊有下面常用的方法:
字典轉json串的帶s就和字符串沾邊,不帶s和文件對象沾邊
1.load和loads方法
1) loads將json(字符串)轉為字典
json_str = """
 {
 ??? "username": "niuhanyang",
 ??? "passwd": 123456,
 ??? "flag": true
 }
 """
import json
json_dic = json.loads(json_str)
 print(json_dic)
 print(type(json_dic))
返回結果
{'passwd': 123456, 'flag': True, 'username': 'niuhanyang'}
<class 'dict'>
2) 將json(字符串)轉為字典load方法是傳入一個文件對象,然后load方法自動去讀這個文件的內容,然后轉成字典
User文件中為內容如下:
{"MLing": {"cart": ["car", "iphone", "mini", "iphone"], "password": "123456"}}
import json
with open('users','a+') as fu:
 ??? fu.seek(0)
 ??? users_dic = json.load(fu)
 ??? users_dic['MLing']['cart'].append('mini4')
 ??? new_users=str(users_dic)
fu.seek(0)
 ??? fu.truncate()
 ??? fu.write(new_users)
用戶的密碼不加引號的話,通過字典讀取的時候是int類型,所以在文件里最好加上引號,這樣讀取出來就是字符串
用戶存值為{"niuhanyang":{"passwd":12345,"cart":['car','iphone']}的時候,由字符串轉字典的時候報錯,是因為json里面只能是
雙引號{"niuhanyang":{"passwd":12345,"cart":["car","iphone"]}
2.dump和dumps字典轉字符串
1)dumps將字典轉換為字符串
d = {
 ??? "hhh": {
 ??????? "price": "90000",
 ??????? "password": "123456"
 ??? },
 ??? "admin": {
 ??????? "password": "123456",
 ??????? "money": 8000
 ??? }
 }
?????? import json
 dic_str = json.dumps(d)
 print(dic_str)
 print(type(dic_str))
2) dumps將字典轉換為字符串,并寫入到文件里
d = {
 ??? "hhh": {
 ??????? "price": "90000",
 ??????? "password": "123456"
 ??? },
 ??? "admin": {
 ??????? "password": "123456",
 ??????? "money": 8000
 ??? }
 }
import json
 fw = open('users.json','w')#后綴是.json的話,pycharm會把文件里的內容自動給格式化
json.dump(d,fw) #把d轉換為字符串,寫到文件fw里面
注意:json串實際上就是一個字符串, json和python的字典類型,但是json里面只能是雙引號,不能是單引號,注意,json中的與字典寫法除了,需要用雙引號之外還有加逗號,每個key之間都要加逗號,如果使用users_dic = json.load(fr)的時候報錯的話,就要考慮是不是文件內容的格式有問題
轉載于:https://www.cnblogs.com/MLing/p/7020587.html
總結
                            
                        - 上一篇: 【php学习笔记】ticks篇
 - 下一篇: c#文件流上传图片