python全栈工程师能接到私活么_Python全栈工程师(包、模块 的导入)
ParisGabriel
每天堅持手寫??一天一篇? 決定堅持幾年 為了夢想 為了信仰
Python人工智能從入門到精通
$ pip3 install tensorflow?:
第三方模塊tensorflow 的安裝
電腦必須有網 命令行自動下載安裝
dir(模塊名):
查看模塊所有屬性
自定義模塊導入
示例:
自定義模塊的實現方法
defmyfac(n):print('正在計算', n, '的階乘')defmysum(n):print("正在計算1+2+3+...+%d的和" %n)
name1= "Audi"name2= "TESLA"
print("mymod模塊被加載!")
注意事項:
自定義模塊的文件要求以.py結尾,文件名必須是標識符的規則
導入 語句import 語句等 搜索塊的路徑順序
import mymod
from mymod import myfac
from mymod import *
去哪兒找這個mymod.py?
搜索順序:
1. 搜索程序運行時的路徑(當前路徑)
2. sys.path 提供的路徑? sys.path是一個列表,里面放的都是模塊的搜索路徑
3. 搜索內建模塊
模塊的加載過程:
1. 在模塊導入時,模塊的所有語句都會執行
2. 如果一個模塊已經導入,則再次導入時不會重新執行模塊內的語句
模塊的重新加載
import mymod
import imp
imp.reload(mymod) # 重新加載mymod模塊
模塊以導入和執行的過程:
1. 先搜索相關的路徑,找到模塊名.py
2. 判斷是否有此模塊對應的.pyc文件。如果.pyc比.py文件新,則直接加載.pyc文件
3. 否則 用模塊.py,文件生成.pyc,并加載執行
pyc python的編譯
編譯 解釋執行
mymod.py --------> mymod.pyc --------> python3
模塊??-------->? 編譯好的Python3文件??--------> Python3解釋執行器
模塊的文檔字符串:
模塊內第一個沒有賦值給任何變量的字符串稱為模塊的文檔字符串
模塊的 __doc__ 屬性
此屬性用于綁定模塊的文檔字符串
模塊的__file__屬性
此屬性用于記錄模塊對應的文件路徑名
示例:
# 模塊的文檔字符串:
'''我的自定義模塊mymod2
此模塊有兩個函數
myfac和 mysum
...
'''
defmyfac(n):'''自定義用來測試用的myfac的文檔字符串'''
print('正在計算', n, '的階乘')defmysum(n):print("正在計算1+2+3+...+%d的和" %n)
name1= "Audi"name2= "TESLA"
print("mymod模塊被加載!")
模塊的__name__屬性
__name__屬性 用來記錄模塊自身名字
作用:
1. 記錄模塊名
2. 用來判斷是否為主模塊
說明:
當此模塊為主模塊(也就是第一個運行的模塊時)運行時, __name__綁定 '__main__'
當此模塊不是主模塊時,而是被其它模塊導入時,此時 __name__ 綁定模塊名
示例:
'''此示例示意 mymod3的 __name__屬性的用法'''
deftest():pass
print("__name__屬性綁定的值是:", __name__)if __name__ == '__main__':print("當前mymod3.py 正在以主模塊運行")else:print("當前mymod3.py 正在被其它模塊導入")print("我的模塊名是", __name__)
模塊的 __all__列表
模塊中的 __all__列表是一個用來存放可導出屬性的字符串列表
作用:
當用from xxx import *語句導入時,只導入 __all__ 列表內的屬性? 并且只對 from xx import * 有效
示例:
#__all__屬性只對 from import * 語句有效
__all__ = ['hello1', 'name1']defhello1():pass
defhello2():pass
defhello3():passname1= 'aaaaaa'name2= 'aaaaaa'
模塊的隱藏屬性
模塊中以'_'開頭的屬性,在from xxx import * 導入時,將不被導入,通常稱這些屬性為隱藏屬性
示例:
此模塊在用from mymod5 import *導入時,只能導入:#f1和 name1
deff1():pass
def_f2():pass
def __f3():passname1= 'aaaaa'_name2= 'bbbbb'
隨機模塊 random
模塊名: random
作用:
用于模擬或生成隨機輸出的模塊
隨機模塊 random
說明:
random模塊是用于模擬或生成隨機輸出的模塊.
import random as R
函數名描述
R.random()
返回一個[0, 1) 之間的隨機實數
R.uniform(a,b)
返回[a,b) 區間內的隨機實數
R.randrange([start,] stop[, step])
返回range(start,stop,step)中的隨機數
R.choice(seq)
從序列中返回隨意元素
R.shuffle(seq[, random])
隨機指定序列的順序(亂序序列)
R.sample(seq,n)
從序列中選擇n個隨機且不重復的元素
系統模塊 sys
運行時系統相關的信息
sys模塊的屬性
屬性描述
sys.path
模塊搜索路徑 path[0] 是當前腳本程序的路徑名,否則為 ''
sys.modules
已加載模塊的字典
sys.version
版本信息字符串
sys.version_info
版本信息的命名元組
sys.platform
操作系統平臺名稱信息
sys.argv
命令行參數 argv[0] 代表當前腳本程序路徑名
sys.copyright
獲得Python版權相關的信息
sys.builtin_module_names
獲得Python內建模塊的名稱(字符串元組)
sys模塊的函數
函數名描述
sys.exit([arg])
退出程序,正常退出時sys.exit(0)
sys.getrecursionlimit()
得到遞歸嵌套層次限制(棧的深度)
sys.setrecursionlimit(n)
得到和修改遞歸嵌套層次限制(棧的深度)
包(模塊包) package
包的定義
包是將模塊以文件夾的組織形式進行分組管理的管理方法
作用:
將一系列模塊進行分類管理,有利于防止命名沖突
可以在需要時加載一個或部分模塊則不是全部模塊
包目錄樹示例:
mypack/? (包名)
__init__.py? ? ? ? ? ? ? ? ? ? ? (__init__.py 文件)
menu.py? ? ? ? ? ? ? ? ? ? ? ? ?(模塊)
games/? ? ? ? ? ? ? ? ? ? ? ? ? (子包名1)
__init__.py? ? ? ? ? ? ?(__init__.py 文件)
contra.py? ? ? ? ? ? ? ? (模塊)
supermario.py? ? ? ? (模塊)
tanks.py? ? ? ? ? ? ? ? ? (模塊)
office/? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(子包名2)
__init__.py? ? ? ? ? ? ? (__init__.py 文件)
word.py? ? ? ? ? ? ? ? ? ?(模塊)
excel.py? ? ? ? ? ? ? ? ? ?(模塊)
powerpoint.py? ? ? ? ?(模塊)
__init__.py 文件
__init__.py是常規包內必須存在的文件
__init__.py會在包加載時自動調用
作用:
1. 編寫此包的內容
2. 在內部填寫文檔字符串
3. 在__init__.py文件內可以加載此包所依懶的一些其它模塊
包的導入
同模塊的導入規則
#import 語句
import 包名 [as 包新名]
import 包名.模塊名 [as 模塊新名]
import 包名.子包名.模塊名 [as 模塊新名]
# from import語句
from 包名 import 模塊名 [as 模塊新名]
from 包名.子包名 import 模塊名 [as 模塊新名]
from 包名.子包名.模塊名 import 屬性名 [as 屬性新名]
# from import *語句
from 包名 import *
from 包名.模塊名 import *
...
導入包時的索引路徑順序:
1. 搜索程序的當前路徑
2. sys.path 提供的路徑
__init__.py內的 __all__ 列表
作用:
用來記錄此包中有哪兒些子包或模塊在用from import *語句 時被導入
說明:
__all__列表只對 from xxx import *語句起作用
包的相對導入:
包的相對導入是指包內模塊的相互導入(不能超過包的最高界限)
語法:
from 相對路徑包或模塊 import 屬性或模塊名
from 相對路徑包或模塊 import *
相對路徑
. 代表當前目錄
.. 代表上一級目錄
... 代表上二級目錄
.... 以此類推
注: 相對導入時不能超出包的外部
模塊的導入分三種
import tiem 直接導入模塊
from time import time 導入time模塊的time功能
from mymod import * 導入time模塊的所有功能
這里*導入可以直接使用函數不需要加模塊名.函數 如果有__all__屬性只導入__all__列表里的
包也是分三種 差不多 包所導入的是文件夾
as 給包或者模塊、屬性、等 改名
(.)統一代表什么什么下的什么什么
解釋執行器就是先把.py文件翻譯成二進制碼.pyc文件再進行運行(先解釋后執行)
但運模塊時自動創建__pycache__ 文件夾 里面放.pyc文件 文檔字符串和函數一樣
一般用三引號括起來 寫就可以了 第一行是標題 換行 第三行開始寫詳細內容
__name__屬性返回一個字符串 如果返回 __main__代表程序主入口 也就是第一個運行的模塊
否則返回當前模塊的名字
__all__ 屬性是一個列表 當三種導入方式導入時只導入列表里的其他的不導入
__開頭的函數 屬性 當三種導入方式導入時不導入_開頭的隱藏函數 其他的全導入
__init__.py 是必須存在的文件 不存在 此文件夾就不是包
里面可以寫屬性 包的文檔字符串
導入路徑 優先相對路徑 其次sys.path路徑
相對路徑 就是 當前路徑 或 路徑名加上模塊
path是系統環境變量列表 相當于全局變量 在任何目錄都能調用這個列表里的路徑
練習:
1. 猜數字游戲
隨機生成一個 0~100之間的一個整數,用變量x綁定
讓用戶輸入一個數y,輸出猜數字的結果:
1) 如果y大于x則提示: "您猜大了"
2) 如果y小于x則提示: "您猜小了"
3) 如果y等于生成的數x,則提供示用戶"恭喜您猜對了 "并退出猜數字
循環重復上述步聚,直到猜對為止。
猜對了,顯示用戶猜數字的次數,然后退出程序
答案:
importrandom
x= random.randrange(101)
i=0whileTrue:
s= int(input("請輸入要猜的數字0~100:"))
i+= 1
if s >x:print("大了")elif s
這里有個2分算法 100內的猜數字一般不超過7次猜對 10000不超過20次就能猜對
練習:
1. 寫一個鬧鐘程序,啟動時設置定時時間,
到時間后打印一句"時間到...." 然后退出程序
importtimedeftime_out():
h= int(input("please input:"))
m= int(input("please input:"))
s= int(input("please input:"))
d=(h, m, s)whileTrue:
s=time.localtime()print('%02d:%02d:%02d' % (s[3], s[4], s[5]), end = "\r")
time.gmtime(1)if s[3: 6] >=d:print("Time out")breaktime_out()
2. 模擬斗地主發牌,撲克牌共54張
黑桃('\u2660'), 梅花('\u2663'), 方塊('\u2665'), 紅桃('\u2666')
A2-10JQK
大王、小王
三個人玩,每人發17張牌,底牌留三張
輸入回車, 打印出第1個人的17張牌
輸入回車, 打印出第2個人的17張牌
輸入回車, 打印出第3個人的17張牌
輸入回車, 打印三張底牌
答案:
importrandom
L= {"大王", "小王"}
range(2, 11)for x in {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}:
L.add("\u2660" +x)
L.add("\u2663" +x)
L.add("\u2665" +x)
L.add("\u2666" +x)print("共54張牌:", L)print()for x in range(3):
input()
s= set(random.sample(L, 17))if x ==0:
x= "第一個玩家:"
elif x == 1:
x= "第二玩家:"
elif x == 2:
x= "第三個玩家:"
print(x, s)
L-=sprint()print("底牌:", L)
今天的:
3. 修改學生信息管理程序,將原student_info.py 拆分為模塊
要求:
1. 主事件循環放在main.py中
2. show_menu 函數放在menu.py中
3. 與學生操作相關的函數放在 student_info.py中
還有昨天的:
3. 改寫之前的學生信息管理程序
要求添加四個功能:
| 5) 按學生成績高-低顯示學生信息 |
| 6) 按學生成績低-高顯示學生信息 |
| 7) 按學生年齡高-低顯示學生信息 |
| 8) 按學生年齡低-高顯示學生信息 |
已 吐血身亡 下次補上 太晚了? 嚶嚶嚶.........
#創建輸入函數:input_student開始 封裝信息輸入
#創建輸出函數:student完成 臨時菜單封裝
defstudent():for a in range(1, 8, 2):
x= "*" *aprint(x.center(9), x.center(10), x.center(10), x.center(9))else:for y in range(1, 4 + 1):
c= "*"
if 4 >= 10:
c= "***"
print(c.center(9), c.center(10), c.center(10), c.center(9))print("^^^^^^^^^^^^^ System menu ^^^^^^^^^^^^^")print("---------------------------------------")print("1): Add Student information")print("---------------------------------------")print("2): print Student information")print("---------------------------------------")print("3): delete Student information")print("---------------------------------------")print("4): revamp Student information")print("---------------------------------------")print("5): Results sorting High --> low")print("---------------------------------------")print("6): Results sorting low --> High")print("---------------------------------------")print("7): Age sort High --> low")print("---------------------------------------")print("8): Age sort low --> High")print("---------------------------------------")print("please input number 1~8 select")print("---------------------------------------")print("input :(Q)Exit procedure")print("---------------------------------------")#創建輸出函數:perform完成
definput_student():
L=[]print("--------Student information enty--------")whileTrue:
name= input("please input name:")if name == "":
q= input("operation succeed! return y / n :")if q == "y":break
else:
input_student()
age= int(input("please input age:"))
score= int(input("please input score:"))
d={}
d= {"name": name, "age": age, "score": score}print("+---------------+----------+----------+")
name= d["name"].center(15)
age= str(d["age"]).center(10)
score= str(d["score"]).center(10)print('''|%s|%s|%s|''' %(name, age, score))print("+---------------+----------+----------+")print("-----Not input Enter be no revamp!-----")
L.append(d)returnL#創建輸入函數:input_student完成
#創建輸出函數:output_student開始 封裝列表打印
defoutput_student(lst):print("-------Student information sheet-------")print("+---------------+----------+----------+")print("| Name | Age | Score |")print("+---------------+----------+----------+")for x inlst:
name= x["name"].center(15)
age= str(x["age"]).center(10)
score= str(x["score"]).center(10)print('''|%s|%s|%s|''' %(name, age, score))print("+---------------+----------+----------+")
q= input("operation succeed! return y / n :")if q == "y":pass
else:
output_student()#創建輸出函數:output_student完成
#創建輸出函數:delete_student開始 封裝刪除信息
defdelete_student(lst):
name= input("please input name delete:")for x inlst:if x["name"] ==name:print("+---------------+----------+----------+")
name= x["name"].center(15)
age= str(x["age"]).center(10)
score= str(x["score"]).center(10)print('''|%s|%s|%s|''' %(name, age, score))print("+---------------+----------+----------+")
delet= input("whether delete (y:yes/y:no):")if delet == "y":
lst.remove(x)
q= input("operation succeed! return y / n :")if q == "y":pass
else:
delete_student()#創建輸出函數:delete_student完成
#創建輸出函數:revamp_student()開始 封裝更改信息
defrevamp_student(lst):
name= input("please input name revamp:")for x inlst:if x["name"] ==name:print("+---------------+----------+----------+")
name= x["name"].center(15)
age= str(x["age"]).center(10)
score= str(x["score"]).center(10)print('''|%s|%s|%s|''' %(name, age, score))print("+---------------+----------+----------+")print("-----not input Enter be no revamp!-----")
rage= input("please input age revamp:")
rscore= input("please input score revamp:")if rage != "":
x["age"] =rageif rscore != "":
x["score"] =rscoreprint("+---------------+----------+----------+")
name= x["name"].center(15)
age= str(x["age"]).center(10)
score= str(x["score"]).center(10)print('''|%s|%s|%s|''' %(name, age, score))print("+---------------+----------+----------+")print("-----------revamp perform!------------")
q= input("operation succeed! return y / n :")if q == "y":pass
else:
revamp_student()#創建輸出函數:revamp_student()完成
#創建輸出函數:output_student_by_score_desc開始 成績高~低排序
defoutput_student_by_score_desc(lst):defk(d):return int(d['score'])
L= sorted(lst, key=k, reverse=True)
output_student(L)#創建輸出函數:output_student_by_score_asc開始 成績低~高排序
defoutput_student_by_score_asc(lst):
L= sorted(lst, key=lambda d: int(d['score']))
output_student(L)#創建輸出函數:output_student_by_age_desc開始 年齡高~低排序
defoutput_student_by_age_desc(lst):
L= sorted(lst, key=lambda d: int(d['age']),
reverse=True)
output_student(L)#創建輸出函數:output_student_by_age_asc開始 年齡低~高排序
defoutput_student_by_age_asc(lst):
L= sorted(lst, key=lambda d: int(d['age']))
output_student(L)#創建輸出函數:System_menu()開始 臨時封裝系統
defSystem_menu():
L=[]whileTrue:
student()
select= input("please input:")if select == '1':
L+=input_student()elif select == '2':
output_student(L)elif select == '3':
delete_student(L)elif select == '4':
revamp_student(L)elif select == '5':
output_student_by_score_desc(L)elif select == '6':
output_student_by_score_asc(L)elif select == '7':
output_student_by_age_desc(L)elif select == '8':
output_student_by_age_asc(L)elif select == 'q':break
#創建輸出函數:System_menu()完成 臨時封裝系統
#運行
總結
以上是生活随笔為你收集整理的python全栈工程师能接到私活么_Python全栈工程师(包、模块 的导入)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓打开rpm文件_android 添加
- 下一篇: 麻省理工18年春软件构造课程阅读10“抽