zoukankan      html  css  js  c++  java
  • 函数的参数与使用

      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
  • 相关阅读:
    剑指Offer-二维数组中的查找
    我的心灵鸡汤
    生活经验总结与感受
    剑指offer-二叉树按之字形打印
    5月总结与回顾
    一致性Hash原理
    B树和B+树的区别
    Java内存区域模型
    解决Hash冲突的四种方法
    Go Web项目搭建-Gin+GORM连接MySQL数据库
  • 原文地址:https://www.cnblogs.com/zhangjianghua/p/8242903.html
Copyright © 2011-2022 走看看