python学习日记之函数(一)

函数

  • 创建函数
  1. 函数的定义 使用def语句来定义函数

主要作用  就是打包代码

格式:

def functionname函数名([parameterlist形式参数]):

       ["""comments"""可选参数]

       [functionbody函数体]

 Pass 空语句 做占位符使用

def yyqx():
    pass

Return  在执行return语句之后直接返回return语句的内容

不会再理会语句后面的内容

def chufa(a,b):
    if b == 0:
        return "除数不能为0!请重新输入!"
    else:
        return a / b
    

返回函数时只需要写函数名即可 不需要小括号

函数只有在定义和调用时需要小括号

如果一个函数没有通过return语句显示返回的内容 它也会再自己运行函数体中的内容后 悄悄的返回一个none值

def yyqx():
    pass

print(yyqx())

       返回多个值 return 值1,值2,值3  —— (值1,值2,值3)

                        Python利用元组进行打包 同样可进行解包

def yyqx():
    return 1,2,8

a,b,c  = yyqx()
print(a,b,c)

  1. 函数的参数

实参是按照形参传入的顺序进行传递

如果同时使用位置参数和关键字参数 位置参数必须在关键字参数之前/在这之间也不行

  1. 位置参数

位置固定的参数称为固定参数

只需要按照顺序传递正确的参数就可以了

  1. 关键字参数

只需要参数的名字就好了(对于参数特别多的参数比较友好)

  1. 默认参数

允许函数在定义的时候就指定默认的值 在函数调用时

没有传入实参 就用默认的值代替

如果传入实参 则自动进行覆盖

def yyqx(a,b,c):
    return"".join((c,b,a))

yyqx(b=1,c=2,a=3)

  1. 冷门小知识

(1)/     斜杠左测必须传递位置参数 禁止使用关键字参数

              右侧不指定 可任意写入

def yyqx(a,/,b,c):
    print(a,b,c)
yyqx(1,b=2,3)

(2)*    *右侧必须传递关键字参数 禁止使用位置参数

              左侧不指定 可任意写入

def yyqx(a,b,*,c,d)
    print(a,b,c,d)
yyqx(a=1,2,c=3,d=4)
    

  1. 函数的好处
  1. 可以最大程度地实现代码重用,减少冗余的代码。
  2. 可以将不同功能的代码段进行封装、分解,从而降低结构的复杂度,提高代码的可读性。
  • 收集参数

可任意传入多个参数

定义方式 定义形参前面加个*  *形参

通过*对多个元素进行打包为元组(一个*)       

或者字典(两个连续的*) 必须使用关键字传递 自动转换为键值对

def yyqx(a,*b,**c):
    print(a,b,c)
yyqx(1,2,3,4,x=5,y=6)

如果在收集参数后面还需要输入其他参数 就需要用关键字参数进行传递 不然将会纳入收集参数中

也同时使用两种方法

  • 解包参数

*/** 不仅在函数定义的时候可以使用 在函数调用时同样有特殊作用

在形参上使用称为参数的打包 在实参上使用称为参数的解包

       **对应关键字参数

qzh = (1,2,3,4)
def yyqx(a,b,c,d):
    print(a,b,c,d)
yyqx(*qzh)

  • 作用域

指一个变量可以被访问的范围 通常 一个变量的作用域 总是由他在代码中被赋值的位置来确定的

  1. 局部作用域

变量的定义(局部变量)在函数里面 则作用域仅限函数里面

  1. 全局作用域

在任意函数的外部去定义一个变量(全局变量) 则他的作用域是全局的

如果一个变量在函数内部、外部均有定义,那么在函数外部返回的就是外部定义的值,如果调用函数,则返回的就是函数内部的值

  1. global语句

作用:声明此变量为全局变量。

用法:global 变量名

x = 2001
def yyqx():
    global x
    x = 1128
    print(x)
yyqx()

  1. 嵌套函数

想调用函数 只能通过调用外部函数来调用

内部函数可以访问外部函数的变量却无法修改

嵌套函数的变量 尽管函数已经被调用完 外层函数的变量会保存下来

不会像局部变量那样调用完就消失了

def yyqx():
    x = 2001
    def lsf():
        x = 1128
        print("lsf x=",x)
    lsf()
    print("yyqx x=",x)

yyqx()

  1. nonlocal语句

内部函数修改外部函数的变量

def yyqx():
    x = 2001
    def lsf():
        nonlocal x
        x = 1128
        print("lsf x=",x)
    lsf()
    print("yyqx x=",x)

yyqx()

  1. LEGB规则

字母越前等级越高

(1)字母含义:

L-Local(function) 函数内的名字空间

E-Enclosing function locals 外部嵌套函数的名字空间

G-Global(module) 函数定义所在模块的名字空间

B-Builtin(Python) Python内置模块的名字空间

(2)变量名定义

在命名变量名时注意不要取和内置函数一样的名字 存在同名函数

定义变量会自动覆盖掉内置函数

1.闭包

工厂函数 能生产函数的函数

Return funB即对funB的一个引用 加上括号即对函数的调用

def yyqx():
    x = 1128
    def lsf():
        print(x)
    return lsf

qx = yyqx()
qx()

实现闭包必须要用到嵌套函数

在本质上,闭包就是将函数内部和函数外部连接起来的桥梁

对于嵌套函数来说,外层函数的作用域是会通过某种形式保存下来的,内层函数可以在外层函数调用周期结束后,仍旧能访问到外层函数的变量(及参数)。

  1. lambda函数
  1. 函数介绍

在使用函数时不需要给函数分配一个名称 该函数就是“匿名函数       在python中使用lambda表达式表示匿名函数

  1. 函数语法

lambda 参数列表:lambda体

参数列表    类似函数中的形参 不同参数之间逗号隔开

                  可参考函数的参数那里对形参的讲解

lambda 表达式的主要代码在此处编写 类似于函数体

                  不能是一个代码块,不能包含多条语句,只能包含一条语句

                  返回的lambda体运算式运算结果

                  与函数不同的是 不需要使用return语句返回

注意:参数列表可有可无,可以接收任意数量的参数,但只能返回一个值

  1. lambda函数与def函数的异同点

a.lambda可以立即传递(无需变量),自行返回结果b.lambda在内部只能包含一行代码

c.lambda是一个为编写简单函数而设计的,而def用来处理更大的任务

d.lambda可以定义一个匿名函数,而def定义的函数必须有一个名字

e. 参数都是可选,也都会返回对象,用法基本一致

f. lambda是一个表达式而非语句,两者应用范围有不同

  1. lambda函数优势:

a.对于单行函数且只有一个返回值,使用lambda表达式可以省去定义函数的过程,让代码更加简洁

b.对于不需要多次复用的函数,用lambda表达式可以在用完后立即释放,提高程序执行的性能。

c. lambda函数可以作为参数传递给其他函数也可 作为函数返回

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我很高兴看到你对软件开发感兴趣,并且已经开始学习编程。根据你提供的引用内容,你目前正在实习,计划每天学习1小时左右的编程,周末学习3-4小时。这是一个很好的计划,通过持续的学习和实践,你将逐渐培养出编程的技能和兴趣。 在软件开发中,数据库是一个非常重要的组成部分。你提到了MySQL,它是一个关系型数据库管理系统,由MySQL AB开发,目前属于Oracle旗下的产品。MySQL是目前最流行的关系型数据库管理系统之一,在WEB方面,MySQL是最好的RDBMS(关系数据库管理系统)。关系数据库将数据保存在不同的表中,这样可以提高速度和灵活性。 另外,你还提供了一段Python代码,这段代码展示了如何打开和读取文件的内容,并最后关闭文件。这是一个基本的文件操作示例,你可以通过这种方式读取和处理文件中的数据。 关于你的问题,如果你想记录你的Python软件开发实习日记,你可以创建一个文本文件,然后使用Python的文件操作功能来写入你的日记内容。你可以使用类似下面的代码来实现: ```python # 打开文件,如果文件不存在则创建新文件 file = open("实习日记.txt", "a") # 写入日记内容 file.write("今天我学习了如何使用Python编写函数。\n") file.write("我解决了一个bug,并优化了代码的性能。\n") # 继续写入其他日记内容 # 关闭文件 file.close() ``` 这样,你就可以通过运行这段代码来将你的实习日记内容写入到名为"实习日记.txt"的文件中。每次运行代码,新的日记内容都会被追加到文件的末尾。 希望这些信息对你有帮助,祝你在软件开发实习中取得成功! #### 引用[.reference_title] - *1* [0基础学习python日记-第1天](https://blog.csdn.net/weixin_44705811/article/details/124206978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python学习日记(三十三) Mysql数据库篇 一](https://blog.csdn.net/weixin_33669473/article/details/113949960)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python学习日记-第二十天- 文件](https://blog.csdn.net/arizia/article/details/127308155)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值