Python函數(shù)傳參

  • 函數(shù)代碼塊以def關鍵字開頭搁胆,后接函數(shù)標識符名稱和圓括號()
  • 所有傳入的參數(shù)和自變量都必須放在圓括號內(nèi),可以在圓括號中定義參數(shù)隘击。
  • 函數(shù)的第一行語句可以選擇性使用文檔字符串脊串,用于存放函數(shù)說明。
  • 函數(shù)內(nèi)容以冒號:開始躏尉,并且要縮進蚯根。
  • return [表達式]結(jié)束函數(shù),選擇性返回一個值給調(diào)用方胀糜。不帶表達式的return相當于返回None颅拦。
  • return有兩個作用:
    用來返回函數(shù)的運行結(jié)果,或者調(diào)用另外一個函數(shù)教藻。
    函數(shù)結(jié)束的標志距帅。只要運行了return,就強制結(jié)束了函數(shù)括堤。return后面的程序都不會被執(zhí)行碌秸。其實,函數(shù)不一定有返回值悄窃。什么都不返回的函數(shù)不包含return語句讥电,或者包含return語句,但沒有在return后面指定值广匙。

if __name____=='___main____' 具體介紹:案例說明

1-先創(chuàng)建一個file.py的文件
pi=3.1415926
def file():
    print('圓周率是: %s' %(pi)) #格式化輸出
file()
#輸出為:圓周率是:3.1415926
2-在創(chuàng)建另外一個file2.py的文件 允趟,調(diào)用file的pi的值恼策,
兩個文件在一個路徑下:
from file import pi
def calc_round(rad):                    #定義圓形面積求解函數(shù)
    return pi * (rad ** 2)
def run():
    print ("圓形面積為:",cale_round(5))  #調(diào)用函數(shù)
run()
#輸出為: 圓周率是:3.1415926
#圓形面積為:78.539815
可以看出來把“ 圓周率是:3.1415926” 這個也輸出來了鸦致。
因為第一個程序里面沒有加入if __name__ == '__main__',
3-增加第一個file.py的函數(shù)的主函數(shù)判斷:
pi=3.1415926
def file():
    print('圓周率是: %s' %(pi)) #格式化輸出
if __name__ == '__main__':
   file()
4-在運行file2.py 可以看出只有 “圓形面積為:78.539815”這一條輸出了涣楷。

1.直接運行:就是直接運行.py文件分唾,name也就是main.程序運行。
2.模塊導入:就是被當成模塊導入到其他python文件中使用狮斗,name為模塊的名字绽乔。
所以,if ___name____ == '____main____' 我們簡單的理解就是: 如果模塊是被直接運行的碳褒,則代碼塊被運行折砸,如果模塊是被導入的,則代碼塊不被運行.


基礎傳參
定義傳參:
def  get_info(name,age): 
  print('%s is %s years old' %(name,age)) #格式化輸出
if __name__=='__main__:'
  get_info('bob',25)
  get_info(name='bob',age=25) #這種方法也可以
#輸出為:bob is 25 years old

非定義傳參沙峻,多個傳參睦授,需要通過*元組或者**字典來定義:
def fun1(*args):  #args 是元組
  print(args)
def fun2(**kwargs): #kwargs是表示字典
  print(kwargs)
def fun3(*args,**kwargs):
  print(args,kwargs)
if __name__=='__main__':
  fun1()
  fun1('hao')
  fun1('hao',123)
  fun1('hao',123,'hello')
  fun2(name='wang',age=27)
  fun3('hao',name='wang',age=27)
#輸出為:age(‘hao’)
#('hao',123,'hello')
#('name':'wang','age':27)
#(‘hao’,){name='wang',age=27}
列表字典傳參
def add(x,y):
  print(x+y)
def get_info(name,age):
  print('%s is %s years old ' % (name,age))
if __name__=='___main__':
  nums =[10,5]
  add(nums[0],nums[1]) #第一種方法傳遞
  add(*num) #第二種方法將列表插開依次傳參
  get_info(age=27,name='wang')
  user = {'name':'wang','age':27}
  get_info(**user) #將字典插開,拆成key=value的形式進行傳參
#輸出為:15
#wangh is 27 years old 
舉例說明摔寨,在python核心編程第二版有個這個樣的例子:
from random import randint去枷,choice
from operator import add,sub
def add(x,y):
    return x + y
def sub(x,y):
    return x - y
def  exam():
       cmds={'+':add,'-':sub}
       #cmds = {'+':lambda x,y:x + y,'-':lambda x,y : x - y} #通過把匿名函數(shù)放到里面
       nums = [randint(1,100) for i in range(2)] #從1到100,隨機出來2個
       nums.sort(reverse=True) #默認是False ,實現(xiàn)降序的排列
       op = choice('+-')
       result = cmds[op](*nums)
       prompt = '%d  %s %d =' %(nums[0],op,nums[1])
       counter = 0
       while counter < 3:
            try:  #不顯示錯誤類型,錯誤類型是空白删顶,如果不是數(shù)字的話竖螃,則繼續(xù)
                answer = int(input(prompt))
            except:
                  continue
           if answer  == result:
              print("very good")
              break
          else:
              print('wrong answer')
          counter +=1
       else:
              print("the answer:")
              print('%s %s' % (prompt,result))

if __name__ =='__main__':
    while True:
            exam()
            try:
                  #去除兩邊的空白,然后在取出第一個字符
                  yn = input('continue(y/n)?').strip()[0].lower() #把字母變成小寫
            except IndexError:  #按回車是indexError,默認是y
                  continue
            except (KeyboardInterrupt, EOFError): #按ctrl +c  或者 ctrl + d 的錯誤類型
                  yn = 'n'  #默認為n
           if yn in 'nN':
              print('\nBye-bye')
              break


高階傳參
通過函數(shù) filter() 函數(shù)來調(diào)用函數(shù)逗余,參數(shù)也是函數(shù)
通過函數(shù) map() 函數(shù)來調(diào)用函數(shù)特咆。
from random import randint 
def func1(x):
  return x % 2  #求偶數(shù)
def func2(x):
return x * 2 +1 
if __name__ == '__main__':
  nums=[randint(1,100) for i in range(10)]  #隨機在1-100中選擇10個數(shù)字
  print(nums)
  print(list(filter(fun1,nums))) 
#filter()要求第一個是函數(shù),第二個充當x傳遞函數(shù)录粱,返回True保留坚弱,返回False過濾掉
  print(list(filter(lambda x : x % 2,nums)))  #通過匿名函數(shù)來定義輸出
  print(list(map(func2,nums)))
  print(list(map(lambda x:x * 2 +1,nums))) #通過匿名函數(shù)來定義

#輸出結(jié)果為:
[8,44关摇,21荒叶,23,44输虱,55些楣,67,33宪睹,2愁茁,1]
[35,51亭病,7鹅很,69]
[35,51罪帖,7促煮,69]
[39,65整袁,33菠齿,11,33坐昙,57绳匀,13,79炸客,91疾棵,43]

文件傳參
通過運行一個file.py文件,來修改里面的內(nèi)容
python file.py  file.txt True  False   
將file.txt里面的內(nèi)容的 True 更改為 False
file.txt 為file1
True     為file2 
False    為file3

from os import remove,rename
from shutil import copy,copy2
from time import strftime,localtime
from sys import argv 
localtime = strftime("%Y%m%d", localtime())

def word(file1,file2,file3):
    file2 = file1 + '.bak' + localtime
    tmp_file = file1 + '.temp'
    copy2(file1, file2) #拷貝一個源文件
    with open(file1, mode='r') as fr, open(tmp_file, mode='w') as fw:
        for line in fr:
            if file2 in line:
                fw.write(line.replace(file2, file3))
            else:
                fw.write(line)
                print("已將%s替換為%s"%(file2,file3))
    remove(file1)
    rename(tmp_file, file1)
    return


if __name__ == "__main__":
  try:
    if len(sys.argv)  == 4:
        file1, file2, file3 = sys.argv[1:] #從左到右進行切片痹仙,分別給三個賦值
        word(file1, file2, file3)
    else:
        print("傳參失敗是尔,請確定參數(shù)是否正確")
  except (KeyboardInterrupt,EOFError,ValueError):
      print("請輸入正確參數(shù)")
   #python 中也可以使用 sys 的 sys.argv 來獲取命令行參數(shù):
   #sys.argv 是命令行參數(shù)列表。
   #len(sys.argv) 是命令行參數(shù)個數(shù)蝶溶。
   #sys.argv[0] 表示腳本名


最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗜历,一起剝皮案震驚了整個濱河市宣渗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梨州,老刑警劉巖痕囱,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異暴匠,居然都是意外死亡鞍恢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門每窖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帮掉,“玉大人,你說我怎么就攤上這事窒典◇〈叮” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵瀑志,是天一觀的道長涩搓。 經(jīng)常有香客問我,道長劈猪,這世上最難降的妖魔是什么昧甘? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮战得,結(jié)果婚禮上充边,老公的妹妹穿的比我還像新娘。我一直安慰自己常侦,他們只是感情好浇冰,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刮吧,像睡著了一般湖饱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杀捻,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天舍咖,我揣著相機與錄音麻削,去河邊找鬼。 笑死顿锰,一個胖子當著我的面吹牛器赞,可吹牛的內(nèi)容都是我干的垢袱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼港柜,長吁一口氣:“原來是場噩夢啊……” “哼请契!你這毒婦竟也來了咳榜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤爽锥,失蹤者是張志新(化名)和其女友劉穎涌韩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氯夷,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡臣樱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了腮考。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雇毫。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖踩蔚,靈堂內(nèi)的尸體忽然破棺而出棚放,到底是詐尸還是另有隱情,我是刑警寧澤馅闽,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布席吴,位于F島的核電站,受9級特大地震影響捞蛋,放射性物質(zhì)發(fā)生泄漏孝冒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一拟杉、第九天 我趴在偏房一處隱蔽的房頂上張望庄涡。 院中可真熱鬧,春花似錦搬设、人聲如沸穴店。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泣洞。三九已至,卻和暖如春默色,著一層夾襖步出監(jiān)牢的瞬間球凰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工腿宰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留呕诉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓吃度,卻偏偏與公主長得像甩挫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子椿每,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容