#!/usr/bin/env/python #-*-coding:utf-8-*- #Author:LingChongShi #查看源碼Ctrl+左鍵 ''' def:函數是一段能夠重複調用的代碼,經過輸入參數,返回對應的結果 格式以下: def 函數名(形式參數): 函數體 ''' '''1、定義一個函數''' def add(a,b): pass #不實現函數功能,只是一個佔位符 '''2、參數''' #必須參數 def info(name,age,address): print('name={0},age={1},address={2}'.format(name,age,address)) print('name={:s},age={:d},address={:s}'.format(name,age,address)) info('xiaoshao',20,'xian') #必須參數:實際參數和形式參數按照順序匹配 #關鍵字參數 def info1(name,age,address): print('name={0},age={1},address={2}'.format(name,age,address)) print('name={:s},age={:d},address={:s}'.format(name,age,address)) info1(age=20,address='xian',name='xiaoshao') #關鍵字參數:制定形式參數對應的實際參數,能夠不用按照順序進行匹配 def info2(name,age,*,address): #聲明函數,參數中*單獨出現,*後面的參數必須使用關鍵字傳入 print('name={0},age={1},address={2}'.format(name,age,address)) info2('xiaoshao',20,address='xian') #默認參數 def info3(name,age,address='beijing'): #函數存在默認參數,默認參數不能放在非默認參數以前 print('name={0},age={1},address={2}'.format(name,age,address)) info3('xiaoshao',20) #默認參數:若是沒有傳遞參數,則會使用默認參數 #動態參數,*arg和**kwargs def info4(name,age,*args): #*address數據類型是元組 print('name={0},age={1},args={2}'.format(name,age,args)) info4('xiaoshao',20,'女','12345678','shenzhen') #調用時,以元組的形式存放全部未命名的變量參數 info4('xiaoshao',20) #調用時,可變形式參數中沒有指明實際參數,即爲一個空元組 def info5(name,age,**kwargs): #**address數據類型是字典 print('name={0},age={1},kwargs={2}'.format(name,age,kwargs)) info5('xiaoshao',20,sex='女',phone='12345678',address='shenzhen') def info6(*args,**kwargs): print(args,kwargs) info6() info6(12,12.33,'中文',[1,2],(3,4),{'a':1},a=4,b='中文') '''3、return返回值''' '''一、return[表達式]:調用方法返回表達式,不帶參數值的return語句時,返回值是None; 二、函數返回值意義:函數/方法返回值是爲了給另一個函數/方法提供一個請求的參數 ''' ''' 接口測試:查看用戶信息 一、發送post請求,login請求成功 二、登陸成功後,返回token 三、使用token,能夠查看用戶信息 ''' def login(username,possword): if username== 'admin' and possword=='12345': return 'ieureuejfdj38028jfkjfkjk' #使用return能夠進行token的返回 # print('ieureuejfdj38028jfkjfkjk') #使用print只是打印token的值,並不返回 else: return 'Login Fail' def userInfo(token): if token=='ieureuejfdj38028jfkjfkjk': print('查看到訂單信息') else: print('退出登陸') userInfo(login('admin','12345')) '''4、變量做用域LEGB''' ''' 一、4種變量做用域: Local(局部做用域):在一個函數或者方法內部; Enclosing(閉包函數外的函數中):嵌套函數,在被包裹函數外部而且在包裹函數內部; Global(全局做用域):執行腳本自身的最高層次; Built-in(內建做用域):Python自身保留的特殊名稱; 二、LEGB規則:在局部沒有找到,去局部外的局部找(閉包),找不到去全局找,再去內建進行搜索,都找不到產生一個NameError; 三、Python中只有模塊(module)、類(class)、函數(def、lambda)才引入新的做用域; 四、Python中代碼塊(if/elif/else、try/except、for/while等)是不會引入新的做用域,即內部定義的變量,外部也可進行訪問; ''' '''一、LG--->局部、全局做用域''' a='全局做用域' def f(): print(a) f() a1='全局做用域' def f1(): a1='局部做用域' print(a1) f1() print(a1) '''二、LEG - 局部、閉包與全局做用域''' a2='全局做用域' def f2(): a2='閉包做用域' def f3(): a2='局部做用域' print(a2) f3() print(a2) f2() print(a2) '''三、LEGB - 局部、閉包、全局與內建做用域''' in_var = 'global variable' def len1(in_var): print('called my len() function') l = 0 for i in in_var: l += 1 return l def a_func(in_var): len_in_var = len1(in_var) #a_func()函數在嘗試搜索內建(B)命名空間以前,首先會在全局做用域(G)中發現len() print('Input variable is of length', len_in_var) a_func('Hello, World!') '''5、global和nonlocal關鍵字''' ''' 一、global:當內部做用域想要修改外部做用域時,須要使用global 二、nonlocal:修改嵌套做用域(enclosing 做用域,外層非全局做用域)中變量時,須要使用nonlocal ''' str='我是全局變量' def fun1(): global str #global:局部變量能夠修改全局變量 str='我是局部變量' print(str) fun1() print(str) def fun2(): str1='我是閉包變量' def fun3(): nonlocal str1 #修改嵌套做用域中變量時,須要使用nonlocal str1='我是局部變量' print(str1) fun3() print(str1) fun2() '''6、特殊狀況''' ''' a=10 def sum(): a=a+1 #sum函數中的a使用的是局部,未定義,沒法修改 print(a) sum() #結果:報錯 ''' #修改a爲全局變量,經過函數參數傳遞,能夠正常執行 a=10 def sum(a): a=a+1 print(a) sum(a)