python開發初識函數:函數定義,返回值,參數


一,函數的定義

1,函數mylen叫做函數名

  #函數名
  #必須由字母下划線數字組成,不能是關鍵字,不能是數字開頭
  #函數名還是要有一定的意義能夠簡單說明函數的功能

2,def是關鍵字 (define)

3,():必須寫

4,函數體內盡量寫注釋,方便查看代碼

5,函數的調用:函數名+括號

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 
 4 def mylen():  #函數名
 5     '''
 6     計算字符串長度的函數  這里寫的是注釋,方便查看代碼
 7     '''
 8     s = 'hello world'
 9     length = 0
10     for i in s:
11         length += 1
12     return length        #函數的返回值
13 leng = mylen() #函數的調用 14 print(leng)

二,函數的返回值 return

1,函數返回值可以是任意的數據類型

2,如果有返回值:必須要用變量接收才會有效果

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 
4 def func():
5     b = [1,2,3]
6     return b   #可以是任何數據類型
7 ret = func()    #有返回值,就需要用變量來接收
8 print(ret)

3,函數可以沒有返回值,默認返回給None
      函數的返回值為None有三種情況
      1.不寫返回值
      2.只寫一個return
      3.return None (幾乎不用)

4,return的作用:結束一個函數的執行

5,函數的返回值不為None,有返回值
     返回一個值(一個變量)
     返回多個值(多個變量),多個值之間用逗號區分
     接收:可以用一個變量接收,以元組的形式返回
     也可以用多個變量接收,返回幾個就用幾個變量去接收 相當於解壓式接收

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 
 4 def func6():
 5     '''返回一個值'''
 6     a =123
 7     return a
 8 
 9 def func7():
10     '''返回多個值'''
11     a = 123
12     b = 'abc'
13     return a,b
14 
15 ret = func7()
16 print(ret)
17 m,n,k = func7()

 三,函數的參數

實參:函數調用的時候傳入的參數

形參:函數定義的時候括號內的參數

參數可以是任意的數據類型,可以傳送0個或者多個參數

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 
 4 def mylen(s):  #參數接收:形式參數,形參
 5     '''
 6     計算字符串長度的函數        ——函數的功能
 7     參數s:接收要計算的字符串   ——參數的信息
 8     return:要計算的字符串長度  ——返回值的信息
 9     '''
10     length = 0
11     for i in s:
12         length += 1
13     return length
14 length = mylen('hello world')  #參數傳入:實際參數,實參
15 print(length)

調用時傳參數(實參)

實參,遵循 位置參數--關鍵字參數

*按照位置參數傳參:按順序定義參數

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 
 4 def my_max(a,b):  #定義:位置參數
 5     '''返回兩個值之間的最大值'''
 6     print(a,b)
 7     if a > b:
 8         return a
 9     else:
10         return b
11 print(my_max(10,20))
12 print(my_max(30,20))

*按照關鍵字參數傳參:可以不按順序傳參數

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 
 4 def my_max(a,b):  #定義:關鍵字參數
 5     '''返回兩個值之間的最大值'''
 6     print(a,b)
 7     if a > b:
 8         return a
 9     else:
10         return b
11 print(my_max(b = 10,a = 20))

定義時候參數(形參)

形參,遵循 位置參數--默認參數

*默認參數

*不要設置可變類型的默認參數

*默認參數可以不傳,不傳用的是默認值,傳參數的話需要用關鍵字傳參,才可以覆蓋默認值

*默認值是在定義函數的時候就已經確定了的

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 
4 def stu_info(name,sex = 'male'):  #默認參數,有一個默認值
5     print('name:%s,sex:%s'%(name,sex))
6 stu_info('alex') #默認參數可以不傳值
7 stu_info('egon','female') #如果傳值了,覆蓋默認值

關於默認參數流程

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 
 4 #關於默認參數流程
 5 s = 'male'
 6 def stu_info(name,sex=s):  #默認參數,有一個默認值
 7     print('name:%s,sex:%s'%(name,sex))
 8 s = 'female' #不影響定義時sex的值
 9 print(stu_info("李淑旗"))
10 #打印出來的就是male   因為開始sex=x=male,然后s是新開辟的一個空間存儲female

不要這是可變類型數據為默認參數

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 
4 #不要設置可變數據類型為默認參數
5 b = []
6 def func(a = []):
7     a.append(1)
8     print(a)
9 # func()....打印下去你會發現這個[]列表一直在追加

 

動態參數

*args  接收的是實參,位置參數,將轉化成元祖返回

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 
 4 #*args  #按位置傳參數
 5 def func(a,b,*c):   #*c接收的是5,5,5,5並且輸出一個元祖包含這個4個5 *args代表把散列的元素拼成元組
 6     my_sum = a+b
 7     for i in c:
 8         my_sum += i
 9     return my_sum
10 print(func(3,2,5,5,5,5))

*kwargs 接收的是實參,關鍵字參數,將轉化成字典返回

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 
4 #**kwargs   #按照關鍵字傳參數
5 def fun(a,b,**kwargs):
6     print(a,b,kwargs)
7 fun(a = 10,b = 20,cccc= 30,dddd = 50)

 

行參,位置順序

1 #!/usr/bin/env python
2 #_*_coding:utf-8_*_
3 
4 #形式參數括號里面的位置順序
5 def f(a,b,*args,defult=6,**kwargs):
6     #位置參數,*args,默認參數,**kwargs
7     print(a,b,args,defult)
8 #傳參數的時候:必須先按照位置傳參數,再按照關鍵字傳參數
9 f(1,2,7,8,defult=10)

 

傳參時候,有時候是可變得數據類型,下面是2個方法可以將不同類型數據類型打散

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 
 4 #在傳參的時候,針對列表,元祖的話,有個*t參數,避免手動傳參
 5 def fun2(*args):#*args代表把散列的元素拼成元組
 6     print(args)
 7 t = (1,2,3,4)
 8 l = [1,2,3,4]
 9 # fun2(t[0],t[1],t[2],t[3])
10 fun2(*t)  #*代表把一個元組、列表拆了
11 fun2(*l)  #*代表把一個元組、列表拆了
12 
13 #針對字典有個**d參數,避免手動傳參
14 def fun3(**kwargs):#*args代表把按關鍵字傳來的參數拼成字典
15     print(kwargs)
16 fun3(a = 10, b = 20)
17 d = {'a': 10, 'b': 20}
18 fun3(**d)  #*代表把一個字典拆了

傳參時候傳遞的是引用 

# 我們之前學過字符串的format方法
msg = "{0},{1}"
print(msg.format("joker","11"))
print(msg.format(*["joker","11"]))

msg = "{name},{age}"
print(msg.format(name="joker",age="11"))
print(msg.format(**{"name":"joker","age":"11"}))

# 傳遞數據類型時候,其實傳遞的是引用
l = [1,2,3,4]
def f1(a1):
    a1.append(999)
f1(l)
print(l) # [1, 2, 3, 4, 999]

# 全局變量,通常全部大寫
name = [1,2,3,4]
def f1():
    global name  # 直接修改
    name = [111]
    return
f1()
print(name)  # [111]


name = [1,2,3,4]
def f1():
    name.append(5) # 局部不能給全局重新賦值
    return
f1()
print(name)  # [1, 2, 3, 4, 5]

相同函數名執行過程

# !/usr/bin/env python
# _*_coding:utf-8_*_
# Author:Joker

def f1(a1,a2):   # 1
    return a1 + a2

def f1(a3,a4):   # 2
    return a3 * a4   # 4

ret = f1(8,8)    # 3 #5

print(ret)       # 6

# 開始f1的空間包含指向為a1 + a2,后來變為了a3 * a4,在實參傳遞的時候,你也會發現給的是a3,a4賦值

通過126發送小郵件程序

# !/usr/bin/env python
# _*_coding:utf-8_*_
# Author:Joker



def sendmail():
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr


    msg = MIMEText('我正在通過PY給你發送郵件,別再睡了。','plain','utf-8') # 創建一個文本類型
    msg['From'] = formataddr(['joker','jokerbj@126.com']) # 二元祖,發件人,發件地址
    msg['Subject'] = "親愛的POPPY君"

    server = smtplib.SMTP('smtp.126.com',25)
    server.login('jokerbj@126.com','授權登錄密碼') # SMTP第三方授權登錄密碼
    server.sendmail('jokerbj@126.com',['對方郵件地址@qq.com',],msg.as_string())
    server.quit()

    return 1

ret = sendmail()
if ret:
    print('email send success!')

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM