pos機(jī)編程教程,python編程系列教程

 新聞資訊  |   2023-03-10 08:53  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于pos機(jī)編程教程,python編程系列教程的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)編程教程的問(wèn)題,今天pos機(jī)之家(www.afbey.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來(lái)看下吧!

本文目錄一覽:

1、pos機(jī)編程教程

2、收銀機(jī)pos機(jī),庫(kù)存,錄入,都怎么弄,最好具體點(diǎn),使用說(shuō)明?

pos機(jī)編程教程

我們之前所有寫過(guò)的代碼,都比較固定,且目的單一,復(fù)用性差等等的缺點(diǎn)。那我們想要重復(fù)利用一段代碼,僅通過(guò)改變它的變量,就可以產(chǎn)生不同的結(jié)果,這樣可不可以呢?這就是函數(shù)所能做到的功能。

def fib(n): # write Fibonacci series up to n """Print a Fibonacci series up to n.""" a, b = 0, 1 while a < n: print(a, end=' ') a, b = b, a+b print()# Now call the function we just defined:fib(2000) # 此處可以任意更改你想要的范圍

這段官方示例代碼,就是把我們之前寫的斐波那契數(shù)列加了一層函數(shù),這下我們可以任意計(jì)算斐波那契數(shù)列了。

The keyword def introduces a function definition

所以,函數(shù)的關(guān)鍵字def就是definition的縮寫,后面跟著函數(shù)名字,并把該函數(shù)的參數(shù)用括號(hào)括起來(lái),以冒號(hào)結(jié)果。函數(shù)主體要和這一句保持四個(gè)空格的縮進(jìn),也就是“must be indented”。

冒號(hào)以下的部分,稱之為body,body里的第一句話卻是用三個(gè)引號(hào)給包起來(lái)了。我們知道前面說(shuō)過(guò)的字符串類型(str)的字符,是用單引號(hào)或雙引號(hào)引起來(lái)的,但在這里用三個(gè)引號(hào)引起來(lái)的是另外一種類型,是文檔類型的字符,(documentation string, docstring),用來(lái)說(shuō)明本函數(shù)的作用 。這一部分是可選的,但是官方建議養(yǎng)成這個(gè)習(xí)慣,關(guān)于它的作用,我們后面很快提到。

so make a habit of it.

剩下的就是執(zhí)行的部分了(execution) ,這里就是我們最初開始寫的fib循環(huán)

a, b = 0, 1while a < n: # 這里的n是函數(shù)傳參過(guò)來(lái)的 print(a, end=' ') # print()默認(rèn)是以\結(jié)束,\被被翻譯成newline,新起一行的意思??梢栽囋噋rint('abc\def')會(huì)發(fā)生什么。 a, b = b, a+bprint() # 這里為什么要有一個(gè)空的print?請(qǐng)自行實(shí)驗(yàn)去掉后會(huì)有什么情況發(fā)生

fib(2000)就是在調(diào)用這個(gè)函數(shù),同時(shí)將2000這個(gè)參數(shù)傳入,while循環(huán)里的n會(huì)將這個(gè)參數(shù)代入進(jìn)行計(jì)算,這就是這段代碼的含義了。如果你仔細(xì)閱讀過(guò)官方關(guān)于這段代碼的解釋,你會(huì)發(fā)現(xiàn)它提到一個(gè)local variables的相關(guān)概念,即變量又有本地和全局之分。這里的本地指的是函數(shù)內(nèi)的變量,外面并不可以直接使用,比如看下面的例子:

a=1def b(n): c = n print(c)b(a)print(c)

c就是函數(shù)b的本地變量,它只能在函數(shù)內(nèi)生效,而在函數(shù)外卻讀不到這個(gè)變量,而a在函數(shù)內(nèi)外都可以讀到。關(guān)于函數(shù)的影響范圍,我們后面還會(huì)提到。當(dāng)前只是讓大家熟悉編程,如果每一個(gè)細(xì)節(jié)都精講,對(duì)大家來(lái)說(shuō)是負(fù)擔(dān)。而在熟悉編程之后,這些細(xì)節(jié)卻又可以提升你的編程能力。所以不要急,我們目前僅需要知道“億點(diǎn)點(diǎn)”知識(shí),可以讓代碼跑起來(lái),大致理解這段代碼的含義即可。

函數(shù)執(zhí)行是帶括號(hào)執(zhí)行,而不帶括號(hào)只運(yùn)行函數(shù)的名字,就會(huì)返回一串神秘代碼

這就相當(dāng)于一個(gè)碗是用來(lái)盛飯的,而你只在那里大叫“碗!碗!碗!”,它根本什么作用都沒有發(fā)揮,而只有你端起碗盛飯,這里它才起了作用。所以當(dāng)你不帶括號(hào)運(yùn)行函數(shù)時(shí),什么作用都不會(huì)發(fā)揮,它只會(huì)返回這個(gè)函數(shù)所在的“地址”,這個(gè)“地址”是什么東西,同樣請(qǐng)你暫時(shí)忽略,后面會(huì)講到。

編程需要了解操作系統(tǒng)原理,所以當(dāng)碰到相關(guān)概念時(shí),我們不得不暫時(shí)跳過(guò)。熟悉編程后,有些東西稍微一提,你當(dāng)即就會(huì)舉一反三,很快理解。不過(guò)想全面了解操作系統(tǒng)原理,還是需要查閱相關(guān)書籍的。但是一定一定要?jiǎng)邮?,本教程及官方文檔的示例代碼,請(qǐng)一定要手動(dòng)跟著敲打出來(lái),這已經(jīng)是非常簡(jiǎn)單的代碼了。

函數(shù)都是會(huì)返回一個(gè)值的,即使你沒有寫出return這個(gè)語(yǔ)句。所以官方在這里給其它編程語(yǔ)言的程序員解釋了一下。

Coming from other languages, you might object that fib is not a function but a procedure since it doesn’t return a value.

python會(huì)在你沒有感知的情況下,做了很多事情,所以讓你編程時(shí)更輕松更簡(jiǎn)單。比如你不寫return,它默認(rèn)“幫”你寫了return并反回"None"這個(gè)值,而其它編程語(yǔ)言如果不寫return語(yǔ)句,可能會(huì)直接提示語(yǔ)法錯(cuò)誤。所以官方的下一段代碼便讓fib用return返回值,此時(shí)你再使用pint(fib2(100))時(shí),卻不返回None了。

另外值得一提的是result.append(a)這一段代碼,result是個(gè)列表,前面我們只是簡(jiǎn)單了解了它,和字符串str有些類似。這里的append是在向列表追加內(nèi)容。我們知道無(wú)論是str, num還是list,function等等我們所有見過(guò)的各種類型,在python里都叫object,這些object都有某些方式去操作它,這些方式叫作method,而append就是list的操作方式之一,以后我們會(huì)碰到很多,先這樣理解。

函數(shù)的使用是非常靈活的,因此在定義函數(shù)時(shí),有很多用法。

函數(shù)定義時(shí)給予默認(rèn)值,這個(gè)官方示例代碼結(jié)合了循環(huán)、判斷和函數(shù)定義。

def ask_ok(prompt, retries=4, reminder='Please try again!'): # prompt, retries和reminder都是參數(shù) while True: ok = input(prompt) if ok in ('y', 'ye', 'yes'): return True if ok in ('n', 'no', 'nop', 'nope'): return False retries = retries - 1 if retries < 0: raise ValueError('invalid user response') print(reminder)

嘗試下面的每一個(gè)函數(shù)調(diào)用

ask_ok('Do you really want to quit?')ask_ok('OK to overwrite the file?', 2)ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')

運(yùn)行過(guò)上面的代碼,如果你在其中故意亂輸入一些字符,它會(huì)提示你'Please try again!',直到某次之后它直接退出,然后報(bào)錯(cuò)'invalid user response'。你會(huì)發(fā)現(xiàn)定義函數(shù)時(shí)括號(hào)內(nèi)的prompt, retries等變量會(huì)和你調(diào)用函數(shù)時(shí)的括號(hào)里傳進(jìn)去的參數(shù)順序保持一致。你的傳參會(huì)改變函數(shù)運(yùn)行時(shí)的動(dòng)作,這樣一來(lái),函數(shù)的使用范圍更廣了。即使你有不同的使用目的,只要函數(shù)設(shè)計(jì)得恰當(dāng),你都可以拿來(lái)使用,復(fù)用率非常高,還省事兒。

上面的示例代碼,也不難理解,都是你見過(guò)的東西,唯一兩個(gè)不同的是in和raise這兩個(gè)關(guān)鍵字(keyword)。

in是判斷一個(gè)序列(sequence)里,有沒有一個(gè)特定的值,比如ABC里有沒有D?比如123里有沒有2等等。

另外一個(gè)是raise, 會(huì)主動(dòng)拋出指定的錯(cuò)誤類型然后停止腳本的執(zhí)行。不過(guò)我們目前對(duì)python中的錯(cuò)誤類型并不熟悉,你只需要知道raise的作用就可以,以后我們會(huì)單獨(dú)講一下它。

這樣你就可以自行理解以上的代碼了,如果還是不理解,多運(yùn)行一下那三句調(diào)用函數(shù)的代碼,然后結(jié)合之前的內(nèi)容,理解這段代碼。

還要注意的是變量和函數(shù)之間的影響,就比如官方在這兩段代碼中展示的變量和函數(shù)的影響范圍:

i = 5def f(arg=i): # 這里的函數(shù)傳參使用了已經(jīng)定義過(guò)了的變量 print(arg)i = 6 # 改變函數(shù)定義時(shí)使用的變量f() # 輸出結(jié)果只使用函數(shù)定義那一刻的變量值,后續(xù)被引用的變量值改變,也不會(huì)影響函數(shù)已經(jīng)使用了的變量。

def f(a, L=[]): L.append(a) return Lprint(f(1)) # 函數(shù)里定義了L這個(gè)列表,雖然在外面看不到,但重復(fù)調(diào)用這個(gè)函數(shù),該列表卻發(fā)生了改變。print(f(2))print(f(3))

為什么會(huì)這樣,為什么第一個(gè)函數(shù)的參數(shù)i不會(huì)改變,而第二個(gè)函數(shù)的參數(shù)L卻在不停的變?

Important warning: The default value is evaluated only once. This makes a difference when the default is a mutable object such as a list, dictionary, or instances of most classes.

官方在這里著重解釋了,當(dāng)函數(shù)使用可變的對(duì)象(object)作用默認(rèn)值時(shí),和不可用對(duì)象作為默認(rèn)值有顯著區(qū)別,如何去理解?

i = 5def f(arg=i): # 這里的i會(huì)使用i的值,是5,而5是個(gè)具體的值,不可改變。def f(a, L=[]): # 這里的L定義了一個(gè)列表,但是列表是可變的,所以在運(yùn)行該函數(shù)時(shí),輸出內(nèi)容總是互相影響。

如何避免這種互相影響的局面呢?官方也已給出了答案。

def f(a, L=None): if L is None: L = [] # 每次運(yùn)行函數(shù)時(shí),L都會(huì)被重置為一個(gè)空的列表,這樣就不會(huì)影響下次調(diào)用的結(jié)果了。 L.append(a) return L

理解了上面的默認(rèn)值,那么也可以理解關(guān)鍵字(Keyword Arguments)的函數(shù)定義與調(diào)用。關(guān)鍵字即一對(duì)key和value組成的,這種類型的對(duì)象可以直接指定參數(shù)的關(guān)系,這種關(guān)系叫作字典(dict)。比如”張三=男“和 ”李蕊=女“,就可以直接得到兩個(gè)姓名以及他們對(duì)應(yīng)的性別,而不用再使用其它變量單獨(dú)定義性別。它與上在的默認(rèn)值的區(qū)別就是”=“號(hào),有=的就是keyword argument, 沒有等號(hào)的就是普通的arguments。

def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'): print("-- This parrot wouldn't", action, end=' ') print("if you put", voltage, "volts through it.") print("-- Lovely plumage, the", type) print("-- It's", state, "!")

帶有關(guān)鍵字的函數(shù)調(diào)用方法:

parrot(1000) # 1 positional argumentparrot(voltage=1000) # 1 keyword argumentparrot(voltage=1000000, action='VOOOOOM') # 2 keyword argumentsparrot(action='VOOOOOM', voltage=1000000) # 2 keyword argumentsparrot('a million', 'bereft of life', 'jump') # 3 positional argumentsparrot('a thousand', state='pushing up the daisies') # 1 positional, 1 keywordparrot(voltage=1000000, action='VOOOOOM', state='BOOOOM') # keyword arguments的順序可以打亂順序可以打亂

但以下使用方法是錯(cuò)誤的:

parrot() # required argument missingparrot(voltage=5.0, 'dead') # non-keyword argument after a keyword argumentparrot(110, voltage=220) # duplicate value for the same argumentparrot(actor='John Cleese') # unknown keyword argument

最重要的一點(diǎn)是,位置參數(shù)(如valtage),一定要在關(guān)鍵字參數(shù)(如state='a stiff')之前,而關(guān)鍵字參數(shù)的順序就可以隨意打亂了,如上面的例子。

下面的官方示例代碼很詳細(xì)地解釋了,(位置)參數(shù),關(guān)鍵字參數(shù),只包含位置參數(shù)和只包含關(guān)鍵字參數(shù)的用法:

def standard_arg(arg): # 普通參數(shù),即位置參數(shù)print(arg)def pos_only_arg(arg, /): # 只允許位置參數(shù)print(arg)def kwd_only_arg(*, arg): # 只允許關(guān)鍵字參數(shù)print(arg)def combined_example(pos_only, /, standard, *, kwd_only): # 將多個(gè)特性混合在一起print(pos_only, standard, kwd_only)

請(qǐng)一定一定要按官方示例代碼中的調(diào)用方法去運(yùn)行上述代碼的調(diào)用,以此來(lái)理解這些特性的使用方式和區(qū)別:

最后值得注意的一點(diǎn)的是**kwds

def foo(name, /, **kwds): return 'name' in kwdsfoo(1, **{'name': 2})# 我們這樣改寫一下代碼去理解def foo(name, /, **kwds): print(name) for i in kwds: # kwds是字典結(jié)構(gòu),它也可以像list一樣使用index獲取對(duì)應(yīng)位置的字符,只是和list有些差別 print(i, kwds[i])foo(1, **{'name': 2}, **{'long': 3})

{'name': 2}就是前面提到的字典(dict), name就是關(guān)鍵字,2就是它的值,然后用花括號(hào)括起來(lái)就是字典了。其中**kwds可以接收多個(gè)字典,而/符號(hào)表示只允許位置參數(shù)。字典同樣我們只是簡(jiǎn)單了解一下,和前面的list一樣,會(huì)有專門的操作方法,我們后面再深入了解它。

Parameters following the "/" may be positional-or-keyword or keyword-only.

因?yàn)閚ame后面跟著/,所以此處表示name是接收位置參數(shù)。

官方還總結(jié)了這些參數(shù)的使用場(chǎng)景:

As guidance:

Use positional-only if you want the name of the parameters to not be available to the user. This is useful when parameter names have no real meaning, if you want to enforce the order of the arguments when the function is called or if you need to take some positional parameters and arbitrary keywords.

Use keyword-only when names have meaning and the function definition is more understandable by being explicit with names or you want to prevent users relying on the position of the argument being passed.

For an API, use positional-only to prevent breaking API changes if the parameter’s name is modified in the future.

如果你暫時(shí)完全理解不了也沒關(guān)系,只要記得位置參數(shù)和關(guān)鍵字的參數(shù)及用法就可以,后面寫腳本時(shí),多寫幾遍腳本就完全理解了。

我們已經(jīng)認(rèn)識(shí)了List([1, 2, 3, 4])和dict({‘a(chǎn)':1, 'b':2}),兩種類型,最后一種我們要認(rèn)識(shí)的是元祖(tuple)。

a=(1,2)print(a)print(a[0])type(a)

這三種類型各有用處,目前我們無(wú)需了解。

剛剛我們講到**kwds會(huì)收集多個(gè)字典,*則會(huì)收集多個(gè)變量。被收集的變量最終會(huì)組合成元祖。

These arguments will be wrapped up in a tuple

官方的示例代碼可能不太好懂,因此,你可以試試下面的代碼:

def output(*args): for i in args: print(i)output('a', 'b', 1, 2, 3)

因此,你可以同時(shí)使用*args和**kwds去收集位置參數(shù)和字典參數(shù),但順序仍然要按照位置參數(shù)在前,字典參數(shù)在后的規(guī)則。后面我們會(huì)經(jīng)常用到這種語(yǔ)法,因此目前了解即可。

解構(gòu)參數(shù)列表,就是在函數(shù)執(zhí)行時(shí)傳參,可以使用*解構(gòu)列表(list)或元祖(tuple),**用來(lái)解構(gòu)字典(dict)。即在定義函數(shù)時(shí),這兩個(gè)符號(hào)可以用來(lái)接收多個(gè)參數(shù),同樣我們?cè)趫?zhí)行該函數(shù)時(shí),也可以使用這兩個(gè)符號(hào),去將多個(gè)參數(shù)分解成單獨(dú)的參數(shù)傳給函數(shù)。只要理解了上述的相關(guān)內(nèi)容,那么你也很容易理解解構(gòu)的應(yīng)用。

4.8.6到4.8.8的內(nèi)容太過(guò)高級(jí),很難讓大家完全理解,再加上這兩節(jié)已經(jīng)給大家介紹了太多的東西,都沒有完全弄懂。所以這部分內(nèi)容請(qǐng)大家先跳過(guò),我們以后了解更多的東西后,再來(lái)理解這部分內(nèi)容吧。

本次教程要接近尾聲了,但末尾是最重要的東西:編碼風(fēng)格。這是一種大家都遵守的編碼規(guī)范,真正好的代碼寫出來(lái)應(yīng)該是賞心悅目的,同時(shí)又是簡(jiǎn)潔高效且易于理解的。而故意使用晦澀難懂的方式書寫代碼的人,看起來(lái)高大上,其實(shí)實(shí)用性極差。大型項(xiàng)目是由眾多人員合力完成,而項(xiàng)目里存在大量晦澀難懂的代碼,這不利于大家通力合作。

當(dāng)然大家還沒有了解全部的語(yǔ)法,因此,這里大家只記住前6條即可。

本次教程結(jié)束,謝謝大家。

收銀機(jī)pos機(jī),庫(kù)存,錄入,都怎么弄,最好具體點(diǎn),使用說(shuō)明?

你說(shuō)這個(gè)就比較麻煩了,因?yàn)槟銢]有說(shuō)是什么型號(hào),由哪家公司生產(chǎn)的POS系統(tǒng)。

不過(guò)沒有關(guān)系,一般來(lái)說(shuō)這種系統(tǒng)都是比較規(guī)范的公司編寫的,可以在幫助文件中查到這家公司的聯(lián)系方式,給他們?nèi)ル娫捯箅娫捈夹g(shù)支援服務(wù)。他們是很樂(lè)意解答的。當(dāng)然了,前提是這家公司還存在。

以上就是關(guān)于pos機(jī)編程教程,python編程系列教程的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)編程教程的知識(shí),希望能夠幫助到大家!

轉(zhuǎn)發(fā)請(qǐng)帶上網(wǎng)址:http://www.afbey.com/news/6939.html

你可能會(huì)喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。