




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
深入淺出Python編程
(
函數與代碼復用)獲取照片拍攝地址信息
獲取照片的經緯度信息根據經緯度反查詢地址通過API地理逆編碼解析地址Outcome單元目標/Objectives理解代碼的復用
熟練掌握函數的定義和調用
理解函數的返回值
理解函數的傳值和傳引用
掌握函數的多種參數傳遞方式⑥
具有個人信息保護和國家版圖意識內容及計劃/Agenda&Schedule8/6ClassHoursDetails??茟帽究?lt;00:10><00:10>回顧&成果介紹<00:25><00:25>認識函數&函數的簡單使用<01:20><01:00>使用位置參數獲取照片經緯度<01:20><01:00>使用關鍵字參數查詢地址信息<01:00><00:40>使用默認值參數查詢地址信息<01:00><00:40>使用不定長參數查詢地址信息<00:05><00:05>課堂小結Total:8/6hours(6/4hPractice)01照片位置信息Photolocation1.任務分析目標解構從照片文件提取GPS經緯度數據利用逆地理編碼查詢地址模式識別借助第三方Python包從文件中讀取照片文件的元數據地理逆編碼可以借助Python第三方模塊實現或者:通過地圖服務商提供的逆地理編碼WebAPI查詢實現1.任務分析模式歸納打印照片的經緯度坐標信息和查詢照片拍攝地址信息都需要重復用獲取照片GPS經緯度數據的代碼,為提高代碼的復用,可以將該功能模塊封裝成一個Python函數算法設計使用exifread模塊讀取照片的GPS信息使用geopy模塊對地理逆編碼查詢/從經緯度查地址使用天地圖地圖服務的WebAPI查詢地址信息2.任務準備exifread模塊Exif(Exchangeableimagefileformat)交換圖像文件格式是專門為數碼相機的照片設定的,可以記錄數碼照片的屬性信息和拍攝數據地理編碼和逆編碼地理編碼是將地址作為輸入,然后將其轉換為地圖上的位置,也就是將地址轉換為經緯度坐標(緯度和經度)。逆地理編碼剛好相反,它是從緯度和經度坐標開始,使用其對應的街道、城市等名稱來標識地址。詳細地址(北京市東城區(qū)景山前街4號故宮博物院)地理坐標(116.39,39.92)地理編碼逆地理編碼2.任務準備geopy模塊一個比較流行的GEO編碼Web服務客戶端geopy不負責地理編碼服務的數據庫,地理編碼由許多不同的服務商提供,它只是一個在單個包中為不同服務提供這些實現的庫大部分的API服務都需要申請開發(fā)者Key,其中Nominatim是免費的,提供低訪問請求,高并發(fā)、頻繁的訪問可能會被拒絕02認識函數function1.函數的定義和調用—
使用函數復用代碼函數(function)就是實現某一個特定功能的代碼塊語法格式:建議命名函數用lowercase_with_underscores,即只用小寫字母單詞函數名稱后面的一對圓括號,即使沒有參數,也需要保留1.函數的定義和調用—
使用函數復用代碼使用函數,減少重復代碼1.函數的定義和調用—
函數的形參與實參函數的參數形參(parameter):定義函數時,在函數聲明中定義的變量。實參(argument):調用函數時,給定函數調用/執(zhí)行的變量把差異參數化把函數看成是一個“通用”的模板不同的部分用一個符號/參數替代1.函數的定義和調用—
函數的返回值return語句如果函數沒有return語句,Python將認為該函數以returnNone既可以用return語句返回數值、字符串等單個、單值,也可以用return語句返回列表、元組、字典、集合等多值2.函數的編碼風格文檔字符串(docstring)函數內的第一條語句是字符串時,該字符串就是文檔字符串利用文檔字符串可以自動生成在線文檔或打印版文檔,還可以讓開發(fā)者在瀏覽代碼時直接查閱文檔2.函數的編碼風格函數注解(annotations)用戶自定義函數類型的元數據完整信息注解以字典的形式存放在函數的__annotations__屬性中形參注解的定義方式是在形參名后加冒號“:”,后面跟一個表達式,該表達式會被求值為標注的值返回值注解的定義方式是加組合符號“->”,后面跟一個表達式,該標注位于形參列表和表示def語句結束的冒號之間創(chuàng)建并使用函數:defprint_city_info(my_city):03使用位置參數獲取照片經緯度positionparameter1.參數的傳值和傳引用傳值(value):當參數類型為固定/不可變數據類型時(如數值、字符串、元組等),在函數內部直接修改形參的值不會影響實參傳引用/傳址(address):當參數類型為可變數據類型時(如列表、字典、集合等),在函數內部使用下標或其他方式為其增加、刪除或修改元素值時,修改后的結果是可以反映到函數之外的,即實參也會得到相應的修改1.參數的傳值和傳引用傳值(value)vs.傳引用/傳址(address)1.參數的傳值和傳引用避免實參被修改2.獲取照片的坐標數據“一點一線,皆是河山”“規(guī)范使用地圖,一點都不能錯?!狈祷谿PS信息經度、緯度和高度等3個值地理坐標系(GCS,GeographicCoordinateSystem)使用三維球面來定義地球上的位置,點(point)要素可通過其經度(longitude)和緯度(latitude)值進行引用國家大地坐標系:CGCS-2000(CGCS,ChinaGeodeticCoordinateSystem2000)GPS坐標大多都是WGS-84(WorldGeodeticSystem-1984)坐標
2.獲取照片的坐標數據DMS
(degree/度,minute/分,second/秒)DD(decimaldegree)在調用函數傳遞參數時,實參和形參的順序必須嚴格一致,并且實參和形參的數量必須相同,這種嚴格按位置來傳遞參數稱之為位置參數(positionalparameters)。以位置參數調用形式獲取照片經緯度坐標值04使用關鍵字參數查詢地址信息KeywordArguments1.關鍵字參數傳入經度和緯度,使用Nominatim地圖服務來進行地址信息查詢。注意參數的順序,緯度在前,經度在后。關鍵字參數(KeywordArguments)是指在函數調用中前面帶有標識符,形如:kwarg=value的參數傳遞方式,也即一種按參數名字傳遞值的方式。1.關鍵字參數關鍵字參數比位置參數更具優(yōu)勢:位置參數傳參容易出錯:不小心把經度和緯度的順序搞反了將會收到一條錯誤提示信息:“ValueError:Latitudemustbeinthe[-90;90]range.”位置參數傳參程序的可讀性也比較差以關鍵字參數調用形式進行逆地理信息查詢照片地址05使用默認值參數查詢地址信息DefaultArgumentValues1.什么是默認值參數定義函數時,可以給函數的形參賦予默認值,這個參數被稱為默認值參數(DefaultArgumentValues)。定義一個帶默認值參數的函數,只需要在形參變量的后面用賦值符為該形參賦一個值即可在調用函數時,如果不給該形參傳遞值,則該形參就使用定義時賦予的默認值??梢允褂谩昂瘮得?__defaults__”查看函數所有默認值參數的當前值2.天地圖逆地理服務API查詢照片地址APIhttp://xxx.xx.xx.xx/geocoder?postStr={'lon':116.37304,'lat':39.92594,'ver':1}&type=geocode&tk=你自己的密鑰除了經度、緯度和開發(fā)者Key之外,其余部分基本都是固定的,特別是URL的域名、版本號等就可以設置為默認值參數2.天地圖逆地理服務API查詢照片地址默認值參數:domain='http://xx.xx.xx.xx’ver=1使用默認值參數調用天地圖API查詢照片地址信息06使用不定長參數查詢地址信息ArbitraryArgument1.不定長參數Python允許函數在執(zhí)行/調用中接受任意數量的實參,也即可變參數或不定長參數(ArbitraryArgument)*args:接收任意多個實參,并將其解包到一個元組中**kwargs:接收任意多個關鍵字參數,并將其解包到一個字典中結合位置參數一起使用時,必須將不定長參數放在位置參數的最后,且*args和**kwargs同時出現時,*args在**kwargs的前面Python先匹配位位置實參再將剩余的位置參數裝入到*args最后將剩余的關鍵字參數轉入到**kwargs2.參數的解包按單值、多個傳遞:根據順序逐一傳遞變量解包方式:解包實參變量傳遞使用不定長參數查詢照片地址信息課堂小結函數是一種僅在調用時運行的代碼塊,函數讓我們編寫的代碼可供重復使用,既能提供代碼的復用率,也讓代碼更易于維護。形參是指出現在函數定義中的名稱,而實參則是在調用函數時實際傳入的值。有傳值和傳引用兩種方式,為了防止傳引用對實參的修改影響到形參,可以傳遞實參的拷貝。函數可以按位置、或通過關鍵字/命名參數(namedargument)傳遞參數值,也可以通過打包/解包使用不定長參數傳遞。函數可以把數據作為結果返回,可以使用return語句顯示指明函數的返回值,沒有return語句時,默認為returnNone。提問&解答深入淺出Python編程
(
函數與代碼復用)批量創(chuàng)建文件夾GUI工具
從Excel的排考文件中提取數據父文件夾名稱為:場次[日期]考試科目名稱,形如「第2場[2021-12-01]Python運維開發(fā)
」文件夾名稱為:[考場號]班級,形如「[4-101]云計算2001班
」Outcome單元目標/Objectives理解函數式編程及高階函數
理解變量作用域及嵌套函數
能編寫閉包函數及生成器、裝飾器函數
能夠利用GUI庫編寫Window程序
掌握Python的模塊和包⑥具有精益求精的工匠精神內容及計劃/Agenda&Schedule6ClassHoursDetails<00:10>回顧&成果介紹<00:30>模塊、包,以及項目目錄規(guī)劃<01:00>高階函數拼接父子目錄路徑<01:00>生成器迭代器進行流水號計數<01:00>閉包及裝飾器實現進度條<00:35>打包應用程序<00:05>課堂小結Total:6hours(4hPractice)01文件夾創(chuàng)建工具GUITools1.任務分析目標解構WindowsGUI界面的實現從Excel中提取數據、分析數據和拼接數據創(chuàng)建父、子文件夾模式識別GUI:第三方模塊,消息事件驅動機制來編程Excel數據讀?。旱谌侥K創(chuàng)建目錄:OS模塊編程接口來創(chuàng)建文件夾1.任務分析模式歸納考慮將不同的功能模塊進行拆分,也就是需要對多代碼文件進行組織對于排考場次的計數、創(chuàng)建進度條等可以運用高階函數,采用函數式編程的方法實現算法設計采用PySimpleGUI庫來構建GUI界面;xlrd模塊讀取Excel文件數據創(chuàng)建一個utils的包存放主模塊以外的代碼map()高階函數將排考數據做拼接映射;生成器、閉包函數做場次流水號計數;裝飾器提供進度條2.任務準備xlrd模塊讀取Excel文件的庫,可以實現指定表單、指定單元格的讀取高版本Excel文件的讀取需要安裝指定的版本/pipinstallxlrd==1.2.0pyinstaller模塊分析代碼并發(fā)現Python代碼執(zhí)行所依賴的所有其他模塊PySimpleGUI使用初學者理解的Python數據類型(列表和字典),簡化了窗口定義,能將tkinter、Qt、WxPython和Remi(基于瀏覽器)等GUI框架轉化為更簡單的界面2.任務準備開發(fā)一個WindowsGUI程序只需要簡單的5步創(chuàng)建一個WindowsGUI程序02規(guī)劃并組織項目文件結構FileOrganization1.模塊的導入與搜索—
文件與路徑os模塊:提供了使用操作系統的接口os.path.join():智能拼接一個或多個路徑os.path.dirname():獲取絕對路徑中的目錄名sys模塊:用來處理Python運行時(runningtime)配置以及資源,從而可以與當前程序之外的系統環(huán)境/Python解釋器(interpreter)進行交互sys.path屬性是一個由字符串組成的列表,用于指定模塊的搜索路徑1.模塊的導入與搜索—
導入模塊模塊:Python把各種定義存入一個.py的Python源代碼文件中,這個文件就是模塊(module)模塊的導入方式import<module_name>:直接把模塊里的對象導入到另一個模塊里,就像在本地使用一樣。from<module_name>import*:導入模塊內定義的所有對象/除了以下劃線“_”開頭的所謂私有對象。一般情況下,不建議從模塊或包內導入*,因為可能會覆蓋已經定義的同名對象。from<module_name>import<sub_module>as<alias>:模塊名后使用as時,直接把as后的名稱與導入模塊綁定,也就是為導入的模塊起了一個別名,以簡化代碼的編寫。1.模塊的導入與搜索—
認識__name__#settings.py__name__=='__main__'通過“__name__”的值是否為“__main__”來判斷是本模塊代碼文件被執(zhí)行,還是被作為模塊導入到別的程序中執(zhí)行。2.創(chuàng)建模塊和項目文件目錄包(package)__init__模塊(module)變量語句函數(function)變量/數據結構(variable)語句/算法(statements)程序=數據結構+算法再談模塊和包的導入Python中使用包(package)來對模塊進行進一步的封裝種用“點式模塊名”構造,例如:模塊名A.B表示包A中名為B的子模塊Python只把含有__init__.py文件的目錄當成包,哪怕是一個空文件2.創(chuàng)建模塊和項目文件目錄GUI工具的項目結構output:目錄,批量創(chuàng)建的文件夾將存放到該目錄下data:目錄,存放了排考數據Excel文件utils:包,包含了一個__init__.py包初始化文件,以及多個功能模塊.py文件__init__.py:空文件,初始化包setting.py:定義工作主目錄、指定文件路徑、定義GUI菜單項等全局變量gui_kit.py:創(chuàng)建GUI主窗口的代碼generator.py:生成器,生成器函數實現文件的計數enclosing.py:閉包,閉包函數實現文件的計數decorator.py:裝飾器,在批量創(chuàng)建文件夾時增加進度條效果2.創(chuàng)建模塊和項目文件目錄創(chuàng)建GUI界面:gui_kit.py模塊創(chuàng)建Windows界面元素,主要包括:菜單欄&菜單文本標簽文本框按鈕下拉框3.創(chuàng)建文件目錄操作函數make_directory.pysheet_names()函數:從Excel文件中獲取所有的工作表Sheets的名稱,返回一個名稱列表;exam_schedules()函數:從指定的Sheet數據表中提取指定列的數據,拼接成父、子兩級目錄;create_folder()函數:在指定的目錄下批量創(chuàng)建文件夾。3.創(chuàng)建文件目錄操作函數make_directory.pysheet_names()函數:從Excel文件中獲取所有的工作表Sheets的名稱,返回一個名稱列表;exam_schedules()函數:從指定的Sheet數據表中提取指定列的數據,拼接成父、子兩級目錄;create_folder()函數:在指定的目錄下批量創(chuàng)建文件夾。3.創(chuàng)建文件目錄操作函數make_directory.pysheet_names()函數:從Excel文件中獲取所有的工作表Sheets的名稱,返回一個名稱列表;exam_schedules()函數:從指定的Sheet數據表中提取指定列的數據,拼接成父、子兩級目錄;create_folder()函數:在指定的目錄下批量創(chuàng)建文件夾。讀取Excel排考文件數據03使用高階函數拼接父子目錄路徑Higher-orderfunction1.了解高階函數—
小函數lambda函數式編程(FunctionalProgramming)就是一種抽象程度很高的編程范式,它的一個特點就是,允許把函數本身作為參數傳給另一個函數,還允許返回一個函數賦值給變量。lambda函數又稱之為lambda表達式、單表達式函數、匿名函數,她以聲明性方式創(chuàng)建函數定義。lambda函數可以包含任意多的參數,但是函數體部分只能包含一個表達式。1.了解高階函數—
函數作為變量值Python中的函數是第一等公民(first-classvalue)也就是說,一旦函數被定義就會被自動創(chuàng)建成一個對象/分配內存,她可以像我們使用的一個普通變量一樣來使用函數1.了解高階函數—
函數作為參數把一個函數作為參數傳遞給另一個函數實際上,lambda函數就是作為參數傳遞給sorted()函數的1.了解高階函數—
函數作為返回值函數的返回值也可以是一個函數,可以用于惰性求值。2.三大內置高階函數—
mapmap()函數根據提供的函數對指定序列做映射,它接收一個函數和一個可迭代對象,將函數作用于可迭代對象的每一個元素語法:2.三大內置高階函數—
mapmap()函數拼接map()映射函數將排考數據列表的每一個字典數據項傳遞給lambda函數,lambda函數再將字典中“場次”和“考室”兩個key的value用反斜線拼接作為一個數據項。2.三大內置高階函數—
reducereduce()函數拼接將兩個參數的函數累積應用于序列的項,從左到右,以便將序列減少到單個值。語法:2.三大內置高階函數—
filterfilter()函數拼接根據條件過濾序列,該函數接收兩個參數,第一個參數是一個函數,第二個參數為序列,序列的每個元素作為參數傳遞給函數進行判,最后將符合條件/返回True的元素放到新列表中。語法:3個內置高階函數的使用map()拼接排考信息04使用生成器迭代器進行流水號計數iteration1.了解迭代與迭代器迭代和迭代器迭代(iteration)是重復一個過程,以生成結果序列(可能是無限的)迭代器(iterators)是使程序員能夠遍歷容器(尤其是列表)的對象,各種類型的迭代器通常通過容器的接口提供可迭代對象vs.迭代器__iter__()方法/可迭代接口的對象__next__()方法1.了解迭代與迭代器iter()&next()字符串變量是一個可迭代對象,通過iter()函數進行轉換后創(chuàng)建了一個迭代器它通過next()函數向前、逐一訪問容器中的元素??傻鷮ο笈c迭代器的性能是一樣的,即它們都是惰性求值(lazyevaluation),指將一個表達式的值計算向后拖延直到這個表達式真正被使用的時候。1.了解迭代與迭代器兔子繁殖問題迭代其實就是一種遞推、逼近。斐波那契數列(FibonacciSequence),又稱黃金分割數列:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n>=2)1.了解迭代與迭代器兔子繁殖問題迭代其實就是一種遞推、逼近。斐波那契數列(FibonacciSequence),又稱黃金分割數列:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n>=2)2.使用yield生成器生成流水號生成器(generators)通常是指生成器函數,是一個用于創(chuàng)建迭代器的工具,返回一個generatoriterator的函數當它們要返回數據時會使用yield語句,而不是returnyield改變函數的執(zhí)行流程,得到一個生成器,每次對生成器上調用next()時,它會從上次離開的位置恢復執(zhí)行(它會記住上次執(zhí)行語句時的所有數據值)2.使用yield生成器生成流水號生成器創(chuàng)建流水號:utils/generator.py3.生成器表達式某些簡單的生成器可以寫成更簡潔的表達式代碼,所用語法類似列表推導式,但外層為圓括號而非方括號。05使用閉包及裝飾器實現進度條closure1.變量作用域和嵌套函數—LEGB原則內置(Built-in)全局(Global)閉包(Enclose)局部(Local)變量的作用域序中代碼能夠訪問到變量的可見范圍,也稱之為命名空間(namespace),也即變量的可用性、可見性范圍LEGB原則L(Local)局部作用域E(Enclosing)閉包函數外的函數中G(Global)全局作用域B(Built-in)內置/Python解釋器作用域,也就是所謂的1.變量作用域和嵌套函數—LEGB原則Global修改外部變量函數內部讀取函數外部變量時可以直接讀取,但修改一個的變量時,須使用global關鍵字明確聲明變量。如果該變量已經在函數外定義,則global修飾后,對該變量的修改會反映到外部變量;如果該變量沒有在函數外部定義,而在函數內部使用global做了修飾后,會創(chuàng)建一個全局變量。1.變量作用域和嵌套函數—
嵌套函數函數嵌套定義(nestedfunction)Python允許嵌套定義函數,也就是函數內部還可以再定義其它函數,這稱之為函數嵌套定義。如果要在一個嵌套的函數中修改嵌套作用域中的變量,則須使用nonlocal關鍵字。1.變量作用域和嵌套函數—
遞歸函數fib(4)fib(3)fib(2)fib(2)fib(1)fib(1)fib(0)fib(1)fib(0)101121013遞歸函數(r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 船舶修理項目風險管理與防范考核試卷
- 碳素材料在精密加工工具中的性能考核試卷
- 公路工程專業(yè)發(fā)展制度試題及答案
- 培訓機構班課管理制度
- 外勤巡夜人員管理制度
- 北京餐飲垃圾管理制度
- 化妝培訓學生管理制度
- 農貿市場計量管理制度
- 理解大數據環(huán)境下數據庫架構的演變試題及答案
- 公司資質證書管理制度
- Unit7SeasonPartALetslearn(教學設計)閩教版英語四年級下冊
- 世界文化遺產武當山古建筑群的資料
- 醫(yī)院醫(yī)療設備采購項目HIS系統及硬件采購投標文件
- 【橡膠工藝】-橡膠產品生產工藝規(guī)程
- 推銷實戰(zhàn)技巧與客戶優(yōu)秀服務技巧
- 福建新費用定額交底材料
- 器質性精神障礙患者的護理
- 木魚湖濕地公園景觀設計
- A0409涉密人員變更審批表
- 五防系統調試報告
- 市委政研室主任關于如何寫稿子的講話
評論
0/150
提交評論