函数的参数与使用

  1 ####################################------------------------------------------------####################################
  2 #1、def关键字,创建函数
  3 #2、函数名
  4 #3、()
  5 #4、函数体
  6 #5、返回值
  7 #6、函数的基本参数:
  8         #默认参数:send_mail(AAA,BBB,CCC="OK") CCC就设置了默认参数,默认参数必须放置在参数列表的最后
  9         #实际参数:ret = send_mail('1360077454@qq.com')实际传输的值
 10         #形式参数:def send_mail(AAA)  [形式参数可以设置多个]
 11         #指定参数:以下面代码为例:默认是 AAA = email ,BBB = "测试第二个形式参数"  如果想要反过来,可以这样写: send_mail(BBB = email,AAA = "测试第二个形式参数") 即可实现
 12 #7、函数的动态参数:
 13         #* 默认将传入的参数,全部放置在元组中  f1(*[11,22,33,44]) 一个* 是把列表里每一个元素传给*args,而不是把整个列表看做一个元素
 14         #** 默认将传入的参数,全部放置在字典中    f1(**{'k':'v','k1':'v1'}) 两个*是把字典里每一个键值对传给*args,而不是把整个字典看做一个元素
 15 #8、函数的万能参数:
 16         #*args,**kwargs  可以同时传入字符串和字典,会自动区分类别
 17 
 18 #/usr/bin/env   python
 19 #-*- coding:utf-8 -*-
 20 '''
 21 def send_mail():
 22     try:                    #捕捉异常,只要这里边出现了异常,就会执行except里的代码
 23          import smtplib
 24          from email.mime.text import MIMEText
 25          from email.utils import formataddr
 26 
 27 
 28          msg = MIMEText('邮件内容','plain','utf-8')
 29          msg['From'] = formataddr(["张江华",'18701130291@163.com'])
 30          msg['To'] = formataddr(["哈哈A",'1360077454@qq.com'])
 31          msg['Subject'] = "主题"
 32 
 33          server = smtplib.SMTP("smtp.163.com",25)
 34          server.login("18701130291@163.com","zhangjianghua123")
 35          server.sendmail('18701130291@163.com',['1360077454@qq.com',],msg.as_string())
 36          server.quit()
 37     except:                     #捕捉异常,只要try里边的代码出现了异常,就会执行except里的代码
 38         return False
 39     else:              #如果没有出现异常,就返回True
 40         return True  #这里的返回值True or False,也可以改为字符串,比如"成功",只需要再把下面的判断一起改了就行
 41 ret = send_mail()       #ret 是send_mail执行完返回的值,True or False 会赋予ret
 42 if ret == True:
 43     print ("发送成功")
 44 else:
 45     print ("发送失败")
 46 '''
 47 '''
 48 def f1():
 49     print (123)
 50     return ('成功')       #在函数中,一旦执行return,函数执行过程立即终止
 51     print (456)
 52 r = f1()
 53 print (r)
 54 '''
 55 '''
 56 def f2():
 57     print (123)         #在函数里,如果没有指定返回值return的话,那么会默认返回None
 58 r = f2()
 59 print (r)
 60 '''
 61 
 62 ####################################------------------------------------------------####################################
 63 
 64 函数的基本参数:
 65 #默认参数:send_mail(AAA,BBB,CCC="OK") CCC就设置了默认参数,默认参数必须放置在参数列表的最后
 66 #实际参数:ret = send_mail('1360077454@qq.com')实际传输的值
 67 #形式参数:def send_mail(AAA)  [形式参数可以设置多个]
 68 #指定参数:以下面代码为例:默认是 AAA = email ,BBB = "测试第二个形式参数"  如果想要反过来,可以这样写: send_mail(BBB = email,AAA = "测试第二个形式参数") 即可实现
 69  send_mail(AAA,BBB)
 70  send_mail(email,"测试第二个形式参数") 
 71 
 72 
 73 def send_mail(AAA,BBB):         #AAA = 外边ret = send_mail()给的值,即:AAA = 1360077454@qq.com ;#BBB 等于 result = send_mail(email,"测试第二个形式参数") 这句中的第二个值,实际参数是跟形式参数相对应的
 74     try:                    #捕捉异常,只要这里边出现了异常,就会执行except里的代码
 75          import smtplib
 76          from email.mime.text import MIMEText
 77          from email.utils import formataddr
 78 
 79 
 80          msg = MIMEText(BBB,'plain','utf-8')      #邮件地址可以设置变量(形式参数),当然,邮件内容或者其他的值也可以设置变量(形式参数)
 81          msg['From'] = formataddr(["张江华",'18701130291@163.com'])
 82          msg['To'] = formataddr(["哈哈A",'1360077454@qq.com'])
 83          msg['Subject'] = "主题"
 84 
 85          server = smtplib.SMTP("smtp.163.com",25)
 86          server.login("18701130291@163.com","zhangjianghua123")
 87          server.sendmail('18701130291@163.com',[AAA,],msg.as_string())  #我需要给多人发送邮件时,只需要把邮件地址设置一个变量
 88          server.quit()
 89     except:                     #捕捉异常,只要try里边的代码出现了异常,就会执行except里的代码
 90         return False
 91     else:              #如果没有出现异常,就返回True
 92         return True  #这里的返回值True or False,也可以改为字符串,比如"成功",只需要再把下面的判断一起改了就行
 93 
 94 #ret = send_mail('1360077454@qq.com')       #ret 是send_mail执行完返回的值,True or False 会赋予ret
 95 #实际参数:ret = send_mail('1360077454@qq.com')实际传输的值
 96 
 97 while True:
 98     email = input("请输入你的邮箱地址:")
 99     result = send_mail(email,"测试第二个形式参数")                   #email变量默认就是传给AAA这个形式参数,系统执行的是形式参数AAA
100     if result == True:
101         print ("发送成功")
102     else:
103         print ("发送失败")
104 
105 ####################################------------------------------------------------####################################
106 
107 函数的动态参数:* 默认将传入的参数,全部放置在元组中  f1(*[11,22,33,44]) 一个* 是把列表里每一个元素传给*args,而不是把整个列表看做一个元素
108 
109 第一种动态参数:*
110 #  * 是动态参数 ,可以接收实际参数传过来的所有元素,并把它们看做一个元组
111 def f1(*args):
112     print (args,type(args))
113 f1(11,22,'zxc','xxx')           #*号可以接收任何的元素
114 li = [11,22,'zxc','xxx']        #给args传了一个列表,他会把列表看做一个元素加入到args
115 f1(li,'zhang')                  #把li整体当做一个元素加入到args,与后边的字符串同为一个元组
116 f1(*li,666)                         #如果加上一个*,代表将这个列表里的每一个元素转化到args元组的元素里边,后边不能添加任何字符串
117 f1('zzc')
118 f1(*'zzc')                      #如果*添加的是字符串,会拆开存成单个元素
119 f1(*'张江华')                  #中文也是一样会拆开
120 执行结果:
121 (11, 22, 'zxc', 'xxx') <class 'tuple'>
122 ([11, 22, 'zxc', 'xxx'], 'zhang') <class 'tuple'>
123 (11, 22, 'zxc', 'xxx', 666) <class 'tuple'>
124 ('zzc',) <class 'tuple'>
125 ('z', 'z', 'c') <class 'tuple'>
126 ('', '', '') <class 'tuple'>
127 ---------------------------------------------------------------------------------------------------------------------------------
128 第二种动态参数:** 默认将传入的参数,全部放置在字典中    f1(**{'k':'v','k1':'v1'}) 两个*是把字典里每一个键值对传给*args,而不是把整个字典看做一个元素
129 
130 def f1(**args):                 #**默认是字典结构,所以赋值也要是字典结构key-value    
131     print (args,type(args))
132 f1(n='zhang',b='jiang',c='hua')
133 dic = {'k':'v','k1':'v1'}
134 f1(**dic)                       #**代表直接将变量或者字典传入**args这个字典中
135 -----------------------------------------------------------------------------------------------------------------------------------
136 函数的万能参数:*args,**kwargs  可以同时传入字符串和字典,会自动区分类别
137 
138 def f1(*args,**kwargs):             #万能参数,前后位置不能变
139     print (args,type(args))
140     print (kwargs,type(kwargs))
141 f1(11,22,33,k='v',k1='v1')            #同时传入字符串和字典,会自动区分
142 执行结果:
143 (11, 22, 33) <class 'tuple'>
144 {'k': 'v', 'k1': 'v1'} <class 'dict'>
145 
146 ####################################------------------------------------------------####################################
147 动态参数实现format功能:
148 
149 s1 = "i am {0},age is {1}".format('zhangjianghua',21)
150 print (s1)
151 s2 = "i am {0},age is {1}".format(*['zhangjianghua',21])
152 print (s2)
153 s3 = "i am {name},age is {age}".format(name='zhangjianghua',age=21)
154 print (s3)
155 dic = {'name':'zhangjianghua','age':21}
156 s4 = "i am {name},age is {age}".format(**dic)
157 print (s4)
158 执行结果:
159 i am zhangjianghua,age is 21
160 i am zhangjianghua,age is 21
161 i am zhangjianghua,age is 21
162 i am zhangjianghua,age is 21

 

posted on 2018-01-08 15:24  张江华1997  阅读(244)  评论(0编辑  收藏  举报