プログラミング機能付きプロセス指向プログラミング
プロセス指向プログラミング[悪い可読性/再利用性が悪い]:今、我々は、のために書かれたプログラムを連絡したまで
# 面向过程编程
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(["李邵奇", '[email protected]'])
msg['To'] = formataddr(["管理员", '[email protected]'])
msg['Subject'] = "情爱的导演"
server = smtplib.SMTP("smtp.163.com", 25)
server.login("[email protected]", "qq1105400511")
server.sendmail('[email protected]', ['管理员', ], 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(["李邵奇", '[email protected]'])
msg['To'] = formataddr(["业务员", '业务员'])
msg['Subject'] = "情爱的导演"
server = smtplib.SMTP("smtp.163.com", 25)
server.login("[email protected]", "qq1105400511")
server.sendmail('[email protected]', ['业务员', ], 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(["李邵奇", '[email protected]'])
msg['To'] = formataddr(["老板", '老板邮箱'])
msg['Subject'] = "情爱的导演"
server = smtplib.SMTP("smtp.163.com", 25)
server.login("[email protected]", "qq1105400511")
server.sendmail('[email protected]', ['老板邮箱', ], 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(["李邵奇", '[email protected]'])
msg['To'] = formataddr(["老板", '老板邮箱'])
msg['Subject'] = "情爱的导演"
server = smtplib.SMTP("smtp.163.com", 25)
server.login("[email protected]", "qq1105400511")
server.sendmail('[email protected]', ['老板邮箱', ], msg.as_string())
server.quit()
user_input = input('请输入角色:')
if user_input == '管理员':
send_email()
elif user_input == '业务员':
send_email()
elif user_input == '老板':
send_email()
関数型プログラミングの場合:
- 自然:コードのNラインが離れて取得し、彼に名前を与えたために、名前とコードの実行により、後で見つけることができます。
- シーン:
- コードを繰り返し
- コード特に複数の画面を分割機能コードによって選択することができます
基本的な構造関数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()
要約:
# 情况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)
def show(name,age):
"""
函数是干什么的... # 必须注明函数
:param name:
:param age:
:return:
"""
return None
関数内のデータは、機能及び機能:()との間で互いに混同とは独立に実行されるかどうか
- 1.関数が終了します
- 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(["李邵奇", '[email protected]'])
msg['To'] = formataddr(["导演", to])
msg['Subject'] = "情爱的导演"
server = smtplib.SMTP("smtp.163.com", 25)
server.login("[email protected]", "qq1105400511")
server.sendmail('[email protected]', [to, ], msg.as_string())
server.quit()
"""
def send_email(to):
template = "要给%s发送邮件" %(to,)
print(template)
user_input = input('请输入角色:')
if user_input == '管理员':
send_email('[email protected]')
elif user_input == '业务员':
send_email('[email protected]')
elif user_input == '老板':
send_email('[email protected]')
演習
# 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('管理员','[email protected]')
elif user_input == '业务员':
send_email('业务员','[email protected]')
elif user_input == '老板':
send_email('老板','[email protected]')
3.1 形参
知識の基本的なパラメータを3.1.1
これは、任意の数のパラメータすることができ
これは、任意の型を指定できます
def func(a1,a2,a3,a4): print(a1,a2,a3,a4) func(2,'name',[1,2,3],False)
3.1.2デフォルトパラメータ
def func(a1,a2,a3=9,a4=10): # 默认参数a3=9,a4=10
print(a1,a2,a3,a4)
func(11,22) # 不给a3,a4传值,则a3,a4等于默认参数
func(11,22,10)
func(11,22,10,100)
func(11,22,10,a4=100)
func(11,22,a3=10,a4=100)
func(11,a2=22,a3=10,a4=100)
func(a1=11,a2=22,a3=10,a4=100)
3.1.3ユニバーサルパラメータ(休憩用)
*引数
位置を受信すると、任意の数の引数、およびタプルにパラメータをすることができます。
1.通話機能なし*
def func(*args): print(*args) func(1,2) ==> (1,2) func(1,2,[12,3,4]) ==> (1,2,[12,3,4]) func((11,22,33)) ==> ((11,22,33)) # 参数是一个元组,打印出来的效果是元组套元组。
2.呼び出し機能*
def func(*args): print(args) func(*(11,22,33)) ==>(11,22,33) # *是用来打散元组的,将元组中的每个元素作为参数。 func(*[11,22,33]) ==>(11,22,33) # *可以用来打散列表/元组 /字典/集合,只是循环内部元素
3.位置によって渡す唯一のパラメータは、
def func(*args): print(args) func(1) func(1,2) # args=(1, 2) func((11,22,33,44,55)) # args=((11,22,33,44,55),) func(*(11,22,33,44,55)) # args=(11,22,33,44,55)
** kwargsから
キーワードは、任意の数の引数を受け入れ、辞書への変換パラメータを見ることができます
1.通話機能なし*
def func(**kwargs): print(***kwargs) func(k=1) **kwargs = {'k':1} func(k1=1,k2=3) **kwargs = {'k1':1,'k2':3}
2.呼び出し機能*
def func(**kwargs): print(kwargs) func(**{'k1':1,'k2':4,'k3':9}) **kwargs = {'k1':1,'k2':4,'k3':9}
3.キーワードは、パラメータのみを渡すことができます
*のArgs / **統合利用をkwargsから:無敵無敵+ =>真無敵
def func(*args,**kwargs): print(args,kwargs) func(1,2,3,4,5,k1=2,k5=9,k19=999) *arg = (1,2,3,4,5) **kwargs = {'k1':2,'k5':9,'k19':999} func(*[1,2,3],k1=2,k5=9,k19=999) *arg = (1,2,3) **kwargs = {'k1':2,'k5':9,'k19':999} func(*[1,2,3],**{'k1':1,'k2':3}) *arg = (1,2,3) **kwargs = {'k1':1,'k2':3} func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3}) *arg = (111,222,1,2,3) **kwargs = {'k11':'alex','k1':1,'k2':3}
3.2引数
3.2.1ロケーションパスパラメータ(関数を呼び出して、パラメータを渡す)(実行)
コール/時間関数は、入力パラメータの順序位置に厳密に実行されます
def func(a1,a2,a3):
print(a1,a2,a3)
func(66,'alex',3)
3.2.2キー・パラメータ渡し(実行)
キーパラメータは、中に使用するために置くためにパラメータを渡す引数です
def func(a1,a2):
print(a1,a2)
func(a1=22,a2=8)
キーの位置に関係パスパラメータを組み合わせて使用することができる渡し:前面の位置に渡されるパラメータは、キーパラメータを渡すの背後に配置されるように、およびパラメータの総数に、最終的に等しいです
def func(a1,a2,a3):
print(a1,a2,a3)
func(1,2,a3=3)
func(1,a2=2,a3=3)
func(a1=1,a2=2,a3=3)
func(a1=1,2,3) # 是错误的
デフFUNC():pythonのための2つの組み込み関数のカスタムopen()関数
マッチングLEN()
3.3主要なパラメータに関連
定義関数
def func(a1,a2): pass def func(a1,a2=None): # 对于默认值,不可变类型随便写,如果是可变类型(有坑)。 pass def func(*args,**kwargs): pass
一般的な使用のための機能不変タイプ、変数の型注意のデフォルト値:
デフォルト値を設定したい場合は空のリストです:
# 不推荐使用(会有坑): def func(data,value = []) pass 推荐使用: def func(data ,value = None) if not value: value = []
# 示例: def func(data,value = [] value.append(data) return value v1 = func(1) # v1 = [1] v2 = func(2,[11,22,33]) # v2 = [11,22,33,2] v3 = func(3) # v3 = [1,3]
演習:
デフFUNC(、B = [])は何のトラップ?
あなたはBパラメータに渡さない場合、デフォルトでは同じアドレスであります
コード記述された結果を見てください
def func(a,b=[]): b.append(a) return b l1 = func(1) l2 = func(2,[11,22]) l3 = func(3) print(l1,l2,l3) # [1,3] [11,22,2] [1,3]
コード記述された結果を見てください
def func(a,b=[]): b.append(a) print(b) func(1) # [1] func(2,[11,22,33]) # [11,22,33,2] func(3) # [1,3]
関数の呼び出し
フロント位置パラメータ、キーワードの後にパラメータ。