python 函數(1)

1、三元運算

三元運算又叫三目運算。(是爲了賦值的)編程

v =  前面  if 條件 else 後面  #條件爲真,v取if前面的值;條件爲假,v取if後面的值
# 三元運算是if條件判斷的簡化版
if 條件:
    v = '前面'  
else:
    v = '後面'

練習題app

# 讓用戶輸入值,若是值是整數,則轉換成整數,不然賦值爲None

data = input('>>>')
value =  int(data) if data.isdecimal() else None

注意:現階段咱們要先用複雜的 if 寫出來,再去考慮是否能用簡化的。函數式編程

​ 先作出來,再思考如何簡化。函數

2、函數

2.1 面向過程編程與函數式編程

截至目前咱們所接觸、所寫的編成爲:面向過程式編程【可讀性差/可重用性差】ui

# 面向過程編程
user_input = input('請輸入角色:')

if user_input == '管理員':
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr

    msg = MIMEText('管理員,我想演男一號,你想怎麼着都行。', 'plain', 'utf-8')
    msg['From'] = formataddr(["李邵奇", '15776556369@163.com'])
    msg['To'] = formataddr(["管理員", '344522251@qq.com'])
    msg['Subject'] = "情愛的導演"

    server = smtplib.SMTP("smtp.163.com", 25)
    server.login("15776556369@163.com", "qq1105400511")
    server.sendmail('15776556369@163.com', ['管理員', ], msg.as_string())
    server.quit()
elif user_input == '業務員':
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr

    msg = MIMEText('業務員,我想演男一號,你想怎麼着都行。', 'plain', 'utf-8')
    msg['From'] = formataddr(["李邵奇", '15776556369@163.com'])
    msg['To'] = formataddr(["業務員", '業務員'])
    msg['Subject'] = "情愛的導演"

    server = smtplib.SMTP("smtp.163.com", 25)
    server.login("15776556369@163.com", "qq1105400511")
    server.sendmail('15776556369@163.com', ['業務員', ], msg.as_string())
    server.quit()
elif user_input == '老闆':
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr

    msg = MIMEText('老闆,我想演男一號,你想怎麼着都行。', 'plain', 'utf-8')
    msg['From'] = formataddr(["李邵奇", '15776556369@163.com'])
    msg['To'] = formataddr(["老闆", '老闆郵箱'])
    msg['Subject'] = "情愛的導演"

    server = smtplib.SMTP("smtp.163.com", 25)
    server.login("15776556369@163.com", "qq1105400511")
    server.sendmail('15776556369@163.com', ['老闆郵箱', ], msg.as_string())
    server.quit()
# 函數式編程
def send_email():
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr

    msg = MIMEText('老闆,我想演男一號,你想怎麼着都行。', 'plain', 'utf-8')
    msg['From'] = formataddr(["李邵奇", '15776556369@163.com'])
    msg['To'] = formataddr(["老闆", '老闆郵箱'])
    msg['Subject'] = "情愛的導演"

    server = smtplib.SMTP("smtp.163.com", 25)
    server.login("15776556369@163.com", "qq1105400511")
    server.sendmail('15776556369@163.com', ['老闆郵箱', ], msg.as_string())
    server.quit()


user_input = input('請輸入角色:')

if user_input == '管理員':
    send_email()
elif user_input == '業務員':
    send_email()
elif user_input == '老闆':
    send_email()

對於函數編程:code

  • 本質:將N行代碼拿到別處並給他起個名字,之後經過名字就能夠找到這段代碼並執行。
  • 場景:
    • 代碼重複執行
    • 代碼特別多超過一屏,能夠選擇經過函數進行代碼的分割

2.2 函數的基本結構

# 函數的定義
def 函數名():   # 函數名的命名規範與變量的同樣
    # 函數內容 (縮進)
    pass

# 函數的執行
函數名()
def get_list_first_data():
    v = [11,22,33,44]
    print(v[0])

get_list_first_data()

# 注意:函數若是不被調用,則內部代碼永遠不會被執行。
# 假如:管理員/業務員/老闆用的是同一個郵箱。
def send_email():
    print('發送郵件成功,假設有10含代碼')


user_input = input('請輸入角色:')

if user_input == '管理員':
    send_email()
elif user_input == '業務員':
    send_email()
elif user_input == '老闆':
    send_email()

2.3 參數

def get_list_first_data(aaa): # aaa叫形式參數(形參)
    v = [11,22,33,44]
    print(v[aaa])
    
get_list_first_data(1) # 2/2/1調用函數時傳遞叫:實際參數(實參)
get_list_first_data(2)
get_list_first_data(3)
get_list_first_data(0)
# 假如:管理員/業務員/老闆用的是同一個郵箱。
"""
def send_email(to):
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr

    msg = MIMEText('導演,我想演男一號,你想怎麼着都行。', 'plain', 'utf-8')
    msg['From'] = formataddr(["李邵奇", '15776556369@163.com'])
    msg['To'] = formataddr(["導演", to])
    msg['Subject'] = "情愛的導演"

    server = smtplib.SMTP("smtp.163.com", 25)
    server.login("15776556369@163.com", "qq1105400511")
    server.sendmail('15776556369@163.com', [to, ], msg.as_string())
    server.quit()
"""
def send_email(to):
    template = "要給%s發送郵件" %(to,)
    print(template)
 

user_input = input('請輸入角色:')

if user_input == '管理員':
    send_email('xxxx@qq.com')
elif user_input == '業務員':
    send_email('xxxxo@qq.com')
elif user_input == '老闆':
    send_email('xoxox@qq.com')

練習題orm

# 1. 請寫一個函數,函數計算列表 info = [11,22,33,44,55] 中全部元素的和。

def get_sum():
    info = [11,22,33,44,55]
    data = 0
    for item in info:
        data += item
    print(data)

get_sum()

# 2. 請寫一個函數,函數計算列表中全部元素的和。

def get_list_sum(a1):
    data = 0
    for item in a1:
        data += item
    print(data)
    
get_list_sum([11,22,33])
get_list_sum([99,77,66])
v1 = [8712,123,123]
get_list_sum(v1)

# 3. 請寫一個函數,函數將兩個列表拼接起來。
def join_list(a1,a2):
    result = []
    result.extend(a1)
    result.extend(a2)
    print(result)
    
join_list([11,22,33],[55,66,77]

# 4. 計算一個列表的長度
def my_len(arg):
    count = 0
    for item in arg:
          count += 1
    print(count)

v = [11,22,33]
my_len(v)
len(v)

# 5. 發郵件的示例
          
def send_email(role,to):
    template = "要給%s%s發送郵件" %(role,to,)
    print(template)
 

user_input = input('請輸入角色:')

if user_input == '管理員':
    send_email('管理員','xxxx@qq.com')
elif user_input == '業務員':
    send_email('業務員','xxxxo@qq.com')
elif user_input == '老闆':
    send_email('老闆','xoxox@qq.com')

2.4 返回值

def func(arg):
    # ....
    return 9 # 返回值爲9 默認:return None

val = func('adsfadsf')
# 1. 讓用戶輸入一段字符串,計算字符串中有多少A字符的個數。有多少個就在文件a.txt中寫多少個「李邵奇」。

def get_char_count(data):
    sum_counter = 0
    for i in data:
        if i == 'A':
            sum_counter += 1
            
    return sum_counter

def write_file(line):
    if len(line) == 0:
        return False  # 函數執行過程當中,一旦遇到return,則中止函數的執行。
    with open('a.txt',mode='w',encoding='utf-8') as f:
        f.write(line)
    return True 

content = input('請輸入:')
counter = get_char_count(content)
write_data = "李邵奇" * counter 
status = write_file(write_data)
if status:
    print('寫入成功')
else:
    print('寫入失敗')

2.5 上述總結

# 狀況1
def f1():
    pass 
f1()

# 狀況2
def f2(a1):
    pass 
f2(123)

# 狀況3
def f3():
    return 1 
v1 = f3()

# 狀況4
def f4(a1,a2):
    # ... 
    return 999
v2 = f4(1,7)

2.6練習題

# 1. 寫函數,計算一個列表中有多少個數字,打印: 列表中有%s個數字。
#    提示:type('x') == int 判斷是不是數字。
"""
# 方式一:
def get_list_counter1(data_list):
    count = 0
    for item in data_list:
        if type(item) == int:
            count += 1
    msg = "列表中有%s個數字" %(count,)
    print(msg)
    
get_list_counter1([1,22,3,'alex',8])

# 方式二:
def get_list_counter2(data_list):
    count = 0
    for item in data_list:
        if type(item) == int:
            count += 1
    return count
    
v = get_list_counter1([1,22,3,'alex',8])
msg = "列表中有%s個數字" %(v,)
print(msg)
"""
# 2. 寫函數,計算一個列表中偶數索引位置的數據構形成另一個列表,並返回。
"""
# 方式一:
def get_data_list1(arg):
    v = arg[::2]
    return v

data = get_data_list1([11,22,33,44,55,66])

# 方式二:
def get_data_list2(arg):
    v = []
    for i in range(0,len(arg)):
        if i % 2 == 0:
            v.append(arg[i])
    return v

data = get_data_list2([11,22,33,44,55,66])

"""
# 3. 讀取文件,將文件的內容構形成指定格式的數據,並返回。
"""
a.log文件
    alex|123|18
    eric|uiuf|19
    ...
目標結構:
a.  ["alex|123|18","eric|uiuf|19"] 並返回。
b. [['alex','123','18'],['eric','uiuf','19']]
c. [
    {'name':'alex','pwd':'123','age':'18'},
    {'name':'eric','pwd':'uiuf','age':'19'},
]
"""


with open('a.log.txt',mode = 'r',encoding = 'utf-8') as f:
    data = f.read()
    print(data)
    def get_file(a):
        date1 = []
        for i in a.split('\n'):
            date1.append(i)
        return date1
    v1 = get_file(data)
    print(v1)

    def get_file1(b):
        date2 = []
        d = []
        for i1 in b.split('\n'):
            i1 = i1.split('|')
            d.append(i1)
            date2 += d
        return date2
    v2 = get_file1(data)
    print(v2)

    def get_file2(c):
        date3 = []
        e = {}
        for i2 in c.split('\n'):
            i2 = i2.split('|')
            e['name'] = i2[0]
            e['pwd'] = i2[1]
            e['age'] = i2[2]
            date3.append(e)
        return date3
    v3 = get_file2(data)
    print(v3)
相關文章
相關標籤/搜索