關於函式的總結之一

2021-07-11 07:37:46 字數 4385 閱讀 1961

1、前言

在每種語言中,總是會存在函式,那麼為什麼每種語言都有函式這個東西呢?

函式,簡單的來說,是一種對程式在邏輯上進行結構化的一種程式設計方法,主要就是將需要解決的問題來進行抽象,來進行分解,從而達到**復用的目的。

2、函式的基本概念

建立函式如下:

>>> def createfunction(x,y):

... return x+y

函式物件或者函式引用如下:

>>> createfunction

函式呼叫:

>>> createfunction(3,2)

5

在函式的返回值方面有幾個分類如下:

a、 當返回0個值也就是沒有返回值的時候,返回的值為none

b、當返回值為1個的時候,返回值為object

c、當返回值大於1個的時候,返回值為乙個tuple --當返回值為tuple的時候,可以進行解包,也就是unpack,如下:

>>> def returnatuple(x):

... return x,3,4

...

>>> x,y,z = returnatuple(1) #unpack操作,將返回值分別進行賦值

>>> x,y,z

(1, 3, 4)

函式的引數:

包括函式的形參:在函式中定義的引數,例如f(x)中的x表示為形參

在呼叫函式的實參:也就是在呼叫函式的時候傳入的引數,例如multi(4,5)也就是實際引數

3、呼叫引數

在呼叫引數的時候,有幾種特殊的引數需要注意,乙個是元組,也就是非關鍵字引數;乙個是字典,也就是關鍵字引數。

在進行呼叫的語法如下:

>>> def func(*tuple_nonkw_args,**dict_kw_args):

... pass

...

a、 順序問題:關鍵字引數必須位於非關鍵字後面否則會報錯syntax error,如下所示:

>>> func(3,4,name='kel',4)

file "", line 1

syntaxerror: non-keyword arg after keyword arg

b、 關鍵字引數,必須是變數等於的形式,如下:

>>> func(3,4,'name'='kel')

file "", line 1

syntaxerror: keyword can't be an expression

c、 在字典做引數的時候:

在使用字典的時候,必須使用雙星號,也就是**dict;可以使用關鍵字方法,例如name=『kel』

>>> func(1,**dict)

"(1,) "

>>> func(1,name='kel')

"(1,) "

>>>func(1,dict) #在使用字典的時候,如果字典不用雙星號進行標記,那麼就會出現如下錯誤,將字典的值也傳遞給了tuple"(1, ) {} "

函式呼叫引數主要規則如下:

>>> def func(positional_args,keyword_args,*tuple_nonkw_args,**dict_kw_args):

... pass

...

4、 在未宣告不允許呼叫函式

在未進行宣告的時候,不允許呼叫函式。

在宣告的時候,順序是可以改變的,只要在呼叫的時候,已經宣告過了即可,如下:

>>> def foo():

... print 'foo is called'

... bar()

...

>>> def bar():

... print 'bar is called'

...

>>> foo()

foo is called

bar is called

從上面例子可以看到,在定義函式foo的時候,並沒有定義bar,但是函式定義成功

在呼叫函式foo的時候,bar函式已經宣告了,從而可以正確執行

在python中,前向引用函式或者後向引用函式都是可以的,不會出現報錯,但是在呼叫的時候,函式一定已經存在宣告。

以下內容是從python核心程式設計中引出,如下:

#!/usr/bin/env python

from operator import add,sub

from random import choice,randint

maxtries = 2 #用來定義最大嘗試次數

op = #主要用字典來定義使用的計算

def doprobe():

'use to print the calculate math and the check result'

nums = [randint(1,10) for i in range(2)]

nums.sort(reverse=true)

opera = choice('+-')

oops = 0

pr = '%d %s %d ' %(nums[0],opera,nums[1]) #列印出來的計算式

answer = op[opera](*nums) #在此,直接使用字典來呼叫方法,並且直接將引數作為乙個元組進行傳入然後計算。

ans = '%d %s %d = %d' % (nums[0],opera,nums[1],answer) #計算結果

while true:

try:

print pr

userinput = int(raw_input('answer is : '))

if userinput == answer:

print 'correct'

break

elif oops == maxtries:

print ans

else:

print 'incorrect ,try again'

oops += 1

except (keyboardinterrupt,eoferror,valueerror):

print 'invalid input ...try again'

def main():

'this is to sure continue the math'

while true:

doprobe()

try:

userchoice = raw_input('continue ? [y]/ [n]').lower()

if userchoice and userchoice[0] == 'n':

break

except:

print 'quit for math'

break

if __name__ == '__main__':

main()

執行結果如下:

[root@python 419]# python easymath.py 

10 + 1

answer is : 11

correct

continue ? [y]/ [n]

10 + 5

answer is : 12

incorrect ,try again

10 + 5

answer is : 13

incorrect ,try again

10 + 5

answer is : 1

10 + 5 = 15

10 + 5

answer is : 1

10 + 5 = 15

10 + 5

answer is : 15

correct

continue ? [y]/ [n]n

在以上例子中:

主要使用兩個方法來分割整個計算,在main中主要是用來做是否迴圈的詢問,在doprobe函式中,主要是用來進行列印計算公式和計算結果。

在進行呼叫函式的時候,第乙個是使用字典來實現case ,when的選擇,第二個是在傳遞計算引數的時候,直接使用乙個元組來呼叫引數。

在進行模組編寫的時候,常量寫在最上面,從而可以直接使用。

關於SQLALCHEMY之(一)

sqlalchemy是乙個不可靠的方案。對於初級開發者而言,並不如sql語句來得簡明。或者說,我不知道是不是所有的orm資料庫物件對映方案都存在這麼一種情況。純以開發邏輯而言。下述兩段 的結論是一致的 code1 正確實現 partner name request.args.get partner ...

總結之一6 6

獵頭不是槍手 獵頭公司不是包辦公司,也不是幫候選人寫簡歷的槍手,候選人往往希望獵頭公司給他們的簡歷 潤色 但是包裝只是對簡歷本身而言讓你的優勢更突出,絕不會幫助你 包裝 你本身不具備的能力。另外簡歷一定不能做假,因為現在越來地越多的公司會做背景調查,職位越高,做調查的時間越長。當然,獵頭會幫助你整合...

LeetCode總結之一

最近在陸陸續續的練習leetcode,將自己以前的只是總綜合鞏固一下,也為了以後面試準備。盡量從自己的所思所想出發,鄙人菜鳥,還請勿噴。整個練習過程中採用c 1 我練習主要遵從一下幾個習慣 from easy to hard similar problems tags.2 由於是第一次練習oj,很多...