08-Python之路---初識函數

🐴 Python之路---初識函數✔️

程序員三大美德:python

  1. 懶惰

由於一直致力於減小工做的總工做量。程序員

  1. 缺少耐性

由於一旦讓你去作本該計算機完成的事,你將會怒不可遏。app

  1. 傲慢

由於被榮譽感衝暈頭的你會把程序寫得讓誰都挑不出毛病來。函數

你們好😄, 如今讓咱們一塊兒來學習一下函數 🎉學習

Why-爲何要使用函數?

如今咱們須要計算一個字符串的長度,咱們能夠直接使用len()方法:翻譯

num = len('hello')

可是若是咱們不用len方法,怎麼實現這個需求?其實也不難:code

s = 'hello'
length = 0
for i in s:
    length += 1
    
print(length)

好了,功能實現了,而後又有一個需求(產品經理平常加需求),要計算另外一個字符串的長度---「world」。blog

因而,本着程序員三大美德,😏咱們使用最強大的快捷鍵---Ctrl+c , Ctrl+v:字符串

s1 = 'world'
length = 0
for i in s1:
    length += 1
    
print(length)

這樣確實能夠實現需求,可是總感受不是那麼完美,爲何呢?pycharm

首先,以前我只須要執行len方法就能夠拿到一個字符串的長度,而如今爲了實現相同功能,咱們須要把相同的代碼寫不少遍 --- 代碼冗餘

其次,剛剛的代碼不是那麼容易讀懂 ---- 可讀性差

咱們就想,要是咱們能像使用len同樣使用咱們這一大段「計算長度」的代碼就行了。這種感受有點像給這段代碼起了一個名字,等咱們用到的時候直接喊名字就能執行這段代碼就行。

函數定義與調用

如今教你們一個技能,把代碼裝起來:

def mylen():
    """計算字符串長度"""
    s = 'hello'
    length = 0
    for i in s:
        length += 1
    print(length)

來分析下這段代碼:

​ 其實除了def這一行和後面的縮進,其它的和前面的代碼是同樣的。

​ 如今執行如下,你會發現啥也沒發生!

​ 由於這裏咱們只是把代碼裝起來了,還不會往外拿,拿應該怎麼拿出來呢?

mylen()

這就是代碼取出來的過程。

# 定義函數
def mylen():
    """計算字符串長度"""
    s = 'hello'
    length = 0
    for i in s:
        length += 1
    print(length)
    
# 調用函數
mylen()

總結:

定義:

  • def關鍵字開頭,空格後接函數名稱圓括號(),最後還有一個「:」

  • 函數名只能包含字符串、下劃線和數字且不能以數字開頭。雖然函數名能夠隨便起,但咱們給函數起名字仍是要儘可能簡短,並能表達函數功能

  • 括號:是必須加的,先別問爲啥要有括號,總之加上括號就對了!

  • 註釋:每個函數都應該對功能和參數進行相應的說明,應該寫在函數下面第一行。以加強代碼的可讀性。

    調用: 就是 函數名() 要記得加上括號

函數返回值

前面咱們寫了一個函數,這個函數能夠幫助咱們計算字符串的長度,而且把結果打印出來。可是,這和咱們的len方法還不是太同樣。之前咱們調用len方法會獲得一個值,咱們能夠用一個變量來接收這個值。

str_len = len('hello')

那麼咱們寫的函數能作到嗎?

# 定義函數
def mylen():
    """計算字符串長度"""
    s = 'hello'
    length = 0
    for i in s:
        length += 1
    print(length)
    
# 調用函數
str_len = mylen()
print('str_len : %s'%str_len)

執行代碼,得到的輸出結果是str_len值爲None,這說明什麼也沒返回

那麼應該怎麼讓他有返回值呢?

return

# 定義函數
def mylen():
    """計算字符串長度"""
    s = 'hello'
    length = 0
    for i in s:
        length += 1
    return length
    
# 調用函數
str_len = mylen()
print('str_len : %s'%str_len)

只須要在函數最後加上一個return的關鍵字,return後面寫上你要返回的值就能夠了

return關鍵字的做用

​ return 是一個關鍵字,在pycharm裏,你會看到它變成藍色了。

​ 這個詞翻譯過來就是「返回」,因此咱們管寫在return後面的值叫「返回值」

  • 沒有返回值:

    • 不寫return的狀況下,會默認返回一個None
    • 只寫return,後面不寫其餘內容,也會返回None,那麼爲啥要寫呢?return的其餘用法,就是一旦遇到return,結束整個函數。  
    • return None:和上面的兩種狀況同樣,咱們通常不這樣寫。
  • 返回一個值:

    ​ 注意:*return和返回值之間要有空格,能夠返回任意數據類型的值

  • 返回多個值:

    • 能夠返回任意多個、任意數據類型的值

      def demo1():
          '''返回多個值''' 
          return 1,2,3,4
      
      
      def demo2():
          '''返回多個任意類型的值'''
          return 1,['a','b'],3,4
      
      ret1 = demo1()
      print(ret1)
      ret2 = demo2()
      print(ret2)
    • 返回的多個值會被組織成元組被返回,也能夠用多個值來接收

      def demo3():
          return 1,['a','b'],3,4
      
      #返回多個值,用一個變量接收
      ret3 = demo3()
      print(ret2)
      
      #返回多個值,用多個變量接收
      a,b,c,d = demo3()
      print(a,b,c,d)
      
      #用多個值接收返回值:返回幾個值,就用幾個變量接收
      a,b,c,d = demo3()
      print(a,b,c,d)

函數的參數

這個函數仍是不完美,由於以前咱們使用len函數的時候,是能夠想計算誰就計算誰的長度,可是咱們寫的這個函數只能計算「hello」的長度,換一個字符串就須要更改函數內部的變量,這樣可不行,那應該怎麼辦?

帶參數的函數:

#函數定義
def mylen(s):
    """計算s1的長度"""
    length = 0
    for i in s:
        length = length + 1
    return length

#函數調用
str_len = mylen("hello")
print('str_len : %s'%str_len)

咱們告訴mylen函數要計算的字符串是誰,這個過程叫作傳遞參數,簡稱傳參,調用函數

時傳遞的這個「hello」和定義函數的s就是參數

實參和形參

咱們調用函數時傳遞的這個「hello」被稱爲實際參數,由於這個是實際的要交給函數的內容,簡稱實參。

定義函數時的s,只是一個變量的名字,被稱爲形式參數,由於在定義函數的時候它只是一個形式,表示這裏有一個參數,簡稱形參。  

傳遞多個參數

參數能夠傳遞多個,多個參數之間用逗號分割。

def mymax(x,y):
	"""比較兩個數的大小"""
    the_max = x if x > y else y
    return the_max

the_max = mymax(9,99)
print(the_max)

正是由於須要傳遞多個參數,因此纔有了下面的參數類型

1.位置參數

按照位置傳值:

def mymax(x,y):
	"""比較兩個數的大小"""
    the_max = x if x > y else y
    return the_max

the_max = mymax(9,99)
print(the_max)

2.關鍵字參數

按照關鍵字傳值:

def mymax(x,y):
	"""比較兩個數的大小"""
    the_max = x if x > y else y
    return the_max

the_max = mymax(y=99, x=9)
print(the_max)

PS:位置、關鍵字形式混着用

def mymax(x,y):
	"""比較兩個數的大小"""
    the_max = x if x > y else y
    return the_max

the_max = mymax(9, y=99)
print(the_max)

正確用法:

  1. 位置參數必須在關鍵字參數的前面
    2. 對於一個形參只能賦值一次  

3. 默認參數

why?😮將變化比較小的值設置成默認參數

def info(name, sex='男'):
    """打印學生信息"""
    print(name, sex)


info('馬克')
info('王富貴', '女')

參數陷阱:默認參數是一個可變數據類型

def func(a, l=[]):
    l.append(a)
    print(l)


func(1)
func(2)
func(3)

4. 動態參數(不定長參數)

  1. *args:按位置傳值多餘的參數都由args統一接收,保存成一個元組的形式

    def mysum(*args):
        """求和"""
        the_sum = 0
        print(args)  # 保存成元組形式
        print(type(args))
    
        for i in args:
            the_sum += i
        return the_sum
    
    
    sum = mysum(10, 20, 30)
    print(sum)
  2. **kwargs:按位置傳值多餘的參數都由kwargs統一接收,保存成一個字典的形式

    def stu_info(**kwargs):
        print(kwargs)  # 保存成字典
        print(kwargs['name'])
    
    
    stu_info(name='不喜歡馬賽克的馬克', sex='男')

⭐️總結

函數:

參數:

相關文章
相關標籤/搜索