day10 函数入门

  • 初识函数
  • 函数的参数
  • 函数的返回值

1. 初识函数

函数到底是个什么东西?

函数,可以当做是一大堆功能代码的集合。

def 函数名():函数内编写代码......函数名()

例如:

# 定义名字叫info的函数
def info():print("第一行")print("第二行")print("第n行...")info()

什么时候会用到函数?

什么时候会用到函数呢?一般在项目开发中有会有两种应用场景:

  • 有重复代码,用函数增加代码的重用性。

    def send_email():# 10行代码print("欢迎使用计算机监控系统")
    if CPU占用率 > 90%:send_email()if 硬盘使用率 > 99%:send_email()if 内存使用率 > 98%:send_email()
    ...
    
  • 代码太长,用函数增强代码的可读性。

    def calculate_same_num_rule():"""判断是否是豹子"""passdef calculate_same_color_rule():"""判断是否是同花"""passdef calculate_straight_rule():"""判断是否顺子"""passdef calculate_double_card_rule(poke_list):"""判断是否对子"""passdef calculate_single_card_rule():"""判断是否单牌"""pass# 1. 生成一副扑克牌
    card_color_list = ["红桃", "黑桃", "方片", "梅花"]
    card_nums = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]  # A
    all_card_list = [[color, num] for color in card_color_list for num in card_nums]# 2.洗牌
    random.shuffle(all_card_list)# 3.给玩家发牌
    ...
    # 4.判断牌是:豹子?同花顺?顺子?对子?单点?calculate_same_num_rule()
    calculate_same_color_rule()
    calculate_straight_rule()
    ...
    

以前我们变成是按照业务逻辑从上到下逐步完成,称为:面向过程编程;现在学了函数之后,利用函数编程称为:函数式编程。

2. 函数的参数

下面用python发邮件,然后再由此引出函数的参数。

  • 注册邮箱
  • 基础配置
    • 授权码
    • SMTP服务器: smtp.126.com
  • 代码发送邮件

提供的发邮件的一个函数。

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr# ### 1.邮件内容配置 ###
msg = MIMEText("约吗?", 'html', 'utf-8')
msg['From'] = formataddr(["刘小伟", "bruce_liu1973@126.com"])
msg['Subject'] = "180一晚"# ### 2.发送邮件 ###
server = smtplib.SMTP_SSL("smtp.126.com")
server.login("bruce_liu1973@126.com", "YNZYIPUHLAYGARAF")  # (邮箱, 授权码)
server.sendmail("bruce_liu1973@126.com", "1134593154@qq.com", msg.as_string()) # (发件邮箱, 收件邮箱, 邮件信息)
server.quit()

那么需求来了,请求大家提一个需求:根据上述代码实现给3个用户发邮件。

v1 = "1134593154@qq.com"
v2 = "jlzllxwchina@163.com"
v3 = "bruce_liu1973@163.com
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddrdef send_mail(email):# 1.邮件内容配置 ###msg = MIMEText("你好,这是一封测试邮件", 'html', 'utf-8')msg['From'] = formataddr(["刘小伟", "bruce_liu1973@126.com"])msg['Subject'] = "测试邮件,不必回复"# ### 2.发送邮件 ###server = smtplib.SMTP_SSL("smtp.126.com")server.login("bruce_liu1973@126.com", "YNZYIPUHLAYGARAF")  # (邮箱, 授权码)server.sendmail("bruce_liu1973@126.com", email, msg.as_string())  # (发件邮箱, 收件邮箱, 邮件信息)server.quit()email_lst = ['1134593154@qq.com', 'bruce_liu1973@163.com', 'jlzllxwchina@163.com']
for email in email_lst:send_mail(email)

2.1 参数

在定义函数时,如果在括号中添加变量,我们称它为函数的形式参数:

# ###### 定义有三个参数的函数(a1/a2/a3一般称为形式参数-形参) #####
def func(a1,a2,a3):print(a1+a2+a3)# 执行函数并传入参数(执行函数传值时一般称为实际参数-实参)
func(11,22,33)# 执行函数并传入参数
func(9,2,103)
  • 位置传参

    def add(n1,n2):print(n1+n2)add(1,22)
    
  • 关键字传参

    def add(n1,n2):print(n1+n2)add(n1=1,n2=22)
    
"""
1. 形参
2. 实参
3. 位置传参
4. 关键字传参
"""# ###### 定义有三个参数的函数(a1/a2/a3一般称为形式参数-形参) #####
def func(a1, a2, a3):print(a1 + a2 + a3)# 执行函数并传入参数(执行函数传值时一般称为实际参数-实参)
func(11, 22, 33)# 执行函数并传入参数
func(9, 2, 103)# 执行函数
func(a1=99, a2=88, a3=1)
func(a1=99, a3=1, a2=88)
func(1, 5, a3=20)
# 执行函数(位置在前、关键字在后)
func(a1=1, 1, a3=20) # 报错,

2.2 默认参数

def func(a1, a2, a3=10):print(a1 + a2 + a3)# 位置传参
func(8, 19)
func(1, 2, 99)# 关键字传参(位置和关键混合时,关键字传参要在后面)
func(12, 9, a3=90)
func(12, a2=9, a3=90)
func(a1=12, a2=9, a3=90)
file_object = open("xxx.txt")  # 不加mode=,默认为mode='rt'

2.3 动态参数

  • def func(*args):print(args) # 元组类型 (22,)   (22,33,99,) ()# 只能按照位置传参
    func(22)
    func(22,33)
    func(22,33,99)
    func()
    
  • **

    def func(**kwargs):print(kwargs) # 字典类型 {"n1":"刘小伟"}    {"n1":"刘小伟","age":"49","email":"xxxx"}  {}# 只能按关键字传参
    func(n1="刘小伟")
    func(n1="刘小伟",age=49)
    func(n1="刘小伟",age=49,email="xx@live.com")
    
  • ,*

    def func(*args,**kwargs):print(args,kwargs) # (22,33,99) {}func(22,33,99)
    func(n1="刘小伟",age=49)
    func(22,33,99,n1="刘小伟",age=49)
    func()
    

    提示:是否还记得字符串格式化时的format功能。

    # format(*args, **kwargs)
    v1 = "我叫{},今年{},性别{}".format("刘小伟",49,"男")v2 = "我叫{name},今年{age},性别{gender}".format(name="刘小伟",age=49,gender="男")
    

    注意事项

    # 1. ** 必须放在 * 的后面
    def func1(*args, **kwargs):print(args, **kwargs)# 2. 参数和动态参数混合时,动态参数只能放在最后。
    def func2(a1, a2, a3, *args, **kwargs):print(a1, a2, a3, args, **kwargs)# 3. 默认值参数和动态参数同时存在
    def func3(a1, a2, a3, a4=10, *args, a5=20, **kwargs):print(a1, a2, a3, a4, a5, args, kwargs)func3(11, 22, 33, 44, 55, 66, 77, a5=10, a10=123)
    

3. 函数返回值

在开发过程中,我们希望函数可以帮助我们实现某个功能,但让函数实现某功能之后有时也需要有一些结果需要反馈给我们,例如:

import requests
from xml.etree import ElementTree as ETdef xml_to_list(city):data_list = []url = "http://ws.webxml.com.cn//WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName={}".format(city)res = requests.get(url=url)root = ET.XML(res.text)for node in root:data_list.append(node.text)return data_listresult = xml_to_list("北京")
print(result)
def func():return 666res = func()
print(res) # 666
def magic(num):result = num + 1000return resultdata = magic(9)
print(data) # 1009

在了解了返回值的基本使用之后,接下来在学3个关键知识:

  • 返回值可以是任意类型,如果函数中没写return,则默认返回None

    def func():return [1,True,(11,22,33)]result = func()
    print(result)
    
    def func():value = 1 + 1ret = func()
    print(ret) # None
    

    当在函数中未写返回值returnreturn None ,执行函数获取的返回值都是None。

    def func():value = 1 + 1return  # 或 return Noneret = func()
    print(ret) # None
    
  • return后面的值如果有逗号,则默认会将返回值转换成元组再返回。

    def func():return 1,2,3value = func()
    print(value) # (1,2,3)
    
  • 函数一旦遇到return就会立即退出函数(终止函数中的所有代码)

    def func():print(1)return "结束吧"print(2)ret = func()
    print(ret)
    
    def func():print(1)for i in range(10):print(i)return 999  # 到此结束print(2)result = func()
    print(result)# 输出
    1
    0
    999
    
    def func():print(1)for i in range(10):print(i)for j in range(100):print(j)returnprint(2)result = func()
    print(result)# 输出
    1
    0
    0
    None
    

小结:

  • 完成某个结果并希望的到结果。

    def send_email():...return Truev1 = send_email()
    
    def encrypt(old):...return "密文..."data = encrypt('刘小伟')
    print(data)
    
  • 基于return控制让函数终止执行

    def func(name):with open("xxx.txt",mode='r',encoding="utf-8") as file_object:for line in file_object:if name in line:return Truedata = func("刘小伟")
    if data:print("存在")
    else:print("不存在")
    
    def foo():while True:num = input("请输入数字(Q):")if num.upper() == "Q":return       # 如果这位置是break,那么while结束之后,最后那个print('....')要执行,但是如果是return# 就会直接退出,返回None ,不再执行任何语句num = int(num)if num == 99:print("猜对了")else:print("猜错了,请继续!")print("....")foo()
    

总结

  1. 如何定义一个函数?

  2. 函数名的规范。(同变量名规范)

    • 规范

    • 建议

      def change_num():pass
      
  3. 函数的注释,说明函数的作用。

    def encrypt(origin):""" 用于数据加密和xxx """pass
    
  4. 定义函数时,参数一般有以下情况(形式参数)

    • 情景1

      def func(a1,a2):pass
      
    • 情景2:

      def func(a1,a2=123):pass
      
    • 情景2:

      def func(*args,**kwargs):pass
      
  5. 函数的返回值,一般用于将函数执行的返回给调用者。

    • 默认返回None
    • 遇到return则函数执行完毕

Python学习笔记--day10函数入门相关推荐

  1. Python学习笔记:函数(Function)

    Python学习笔记:函数(Function) 一.函数基本概念 函数是Python里组织与重用代码最重要的方法.一般来说,如果你期望多次重复相同或相似的代码,写一个可重用的函数可能是值得的.函数通过 ...

  2. Python学习笔记12_函数

    Python学习笔记12_函数 文章目录 Python学习笔记12_函数 1.函数定义 2.函数调用 3.函数的参数 3.1.可更改对象和不可更改对象参数 3.2.必需参数(位置参数) 3.3.关键字 ...

  3. Python学习笔记—低阶入门(已完结)

    目录 前言 注意 该不该学习Python(个人感受,纯属胡言论语) 基础知识:Python 的数据存储机制 第一章 Python基本语法 1.1 Python 数据类型 1.1.1 数值类型 1.1. ...

  4. Python学习笔记 之 从入门到放弃

    笔记目录 9月22日:<基础教程>基础知识 ·模块导入 ·用变量引用函数(或者Python中大多数的对象) ·将数值转换成字符串的方法:str类型.repr函数 9月23日:列表.元组 · ...

  5. Python学习笔记——一些函数

    本文对应头歌上的Python练习:https://www.educoder.net/paths/pn7qklv9 基础知识1: input( )函数 input()函数从控制台获得用户输入,无论用户在 ...

  6. 小甲鱼python003答案_小甲鱼:Python学习笔记003_函数

    >>> # 函数 >>> def myFirstFunction(params1,params2...): print("这是我的第一个函数!" ...

  7. Python学习笔记系列——函数

    今年下半年的计划主要是Python和Mysql了,公司不方便看书和视频,就照着廖雪峰的Python网站开始看了.以下纯为个人笔记记录,若是想系统学习的小伙伴还是看这里的好一些,毕竟系统.https:/ ...

  8. Python学习笔记:匿名函数

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  9. Python学习笔记:函数

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

最新文章

  1. android button 添加事件_2019最新Android常用开源库总结
  2. 日志分析工具 LogParser
  3. C# 开发和使用中的33个技巧
  4. Python3 多线程问题:ModuleNotFoundError: No module named 'thread',原因及解决办法。
  5. java调用第三方dll文件 源码_C++调用python文件(包含第三方库)
  6. oracle删除后电脑卡,彻底删除oracle服务 -电脑资料
  7. 【刷题】LOJ 6011 「网络流 24 题」运输问题
  8. 通过git将本地代码上传码云
  9. php 网站域名怎么更换,教你如何快速给网站更换域名,简单粗暴!
  10. c语言 随机漫步,随机漫步理论
  11. Android Studio升级到3.0.0后构建项目时出现的问题总结
  12. 【哈佛商评】好编辑成就内容营销
  13. paip..net DATAGRIDVIEW表格里边加PROCESSBAR进度条控件总结
  14. 警惕!全球酒店门锁很容易受到黑客攻击
  15. 基本共射放大电路概念详解
  16. 买房税费大攻略!哪些费用必须交?
  17. 如何将MAC的文件存储至NAS?
  18. 计算机系统--机器指令与汇编
  19. c语言kbhit函数在哪里,kbhit()函数
  20. fm24c16c语言程序,铁电存储器FM24C16的页面写和任意字节读汇编程序

热门文章

  1. 2022新版PMP考试有哪些变化?
  2. turtle之绘制美国队长的盾牌
  3. 网页中滑动导航菜单制作
  4. 什么是索引,索引的优缺点
  5. Photoshop使用背景图层的方法
  6. 人人都该了解的思维修炼
  7. FITC-STL,PL;荧光素标记马铃薯凝集素(STL,PL)
  8. 爱情三十九课,爱的礼物
  9. 不来了解下JVM支持的语言有哪些?
  10. iPhone/iPad应用使用麦克风的开启和关闭