Day14笔记-函数简介&定义&调用&参数一

一、列表元组字典集合字符串的总结

列表list元组tuple字典dict集合set字符串str
是否可变可变不可变可变可变不可变
是否有序有序有序无序无序有序
是否去重可重复可重复key去重,value可重复去重可重复
数据类型任意类型任意类型key不可变数据,value任意类型不可变数据------
append/extend/insert------updateadd/update-------
remove/pop/clear------popremove/pop/discard-------
reverse/sort-------------------------------
min/max/count/index/len同列表keys/values/items/lenmax/min/lencount/index/find/len
其他操作+ * in copy+ * inin copyin copy+ * in

二、函数/方法【重点掌握】

function:函数/功能

method:方法

1.基本使用【重点掌握】

​ 概念

​ 定义

​ 调用

​ 参数和返回值

​ 函数的基本封装

2.进阶使用

​ 匿名函数

​ 闭包

​ 变量的作用域

​ 迭代器

​ 高阶函数

​ 装饰器

​ 函数递归

1.概述

​ 在一个完整的项目中,某些功能可能会被反复使用,如果将反复出现的代码封装成函数,以后如果要继续使用该功能则直接使用函数即可,另外,如果要修改需求,只需要修改函数即可

本质:对某些特殊功能的封装

【面试题】优点:

​ a.简化代码结构,提高应用的模块性

​ b.提高了代码的复用性

​ c.提高了代码维护性

# 需求:求一个圆的面积
​
# 1.
r1 = 30
area1 = 3.14 * r1 ** 2
print(area1)
​
r2 = 5
area2 = 3.14 * r2 ** 2
print(area2)
​
r3 = 25
area3 = 3.14 * r3 ** 2
print(area3)
​
# 2.优化
# 函数的本质:对某些功能的封装,形成了一个工具,该工具可以反复被使用
def area(r):
    return 3.14 * r ** 2
print(area(30))
print(area(5))
print(area(25))
​
# 列表的系统功能【append/remove/reverse.....】、字符串的系统功能【replace/find/center.....】
2.定义
语法:
    def  函数名(变量1,变量2....):
            函数体
            return   返回值

说明:

​ a.def是一个关键字,是definition的缩写,专门定义函数

​ b.函数名:遵循合法标识符的规则和规范即可,尽量做到见名知意,注意:和变量的定义类似,全部小写

​ c.(变量1,变量2....):被称为形式参数,是一个参数列表,都只是没有赋值的变量

​ d.函数体:封装某些特殊的功能

​ e.return是一个关键字,表示返回,注意:只能用在函数中,表示结束函数,可以单独使用,也可以携带数据,当携带数据,则表示该函数的返回值

​ f.返回值:常量,变量,表达式

​ g.函数的定义分为两部分:函数的声明和函数的实现

​ h.变量1,变量2.... 和 return 返回值 可以根据具体的需求选择性的省略

print('start')
​
# 1.无参无返回值
def func1():
    print('ok~~~11111')
​
# 2.有参无返回值
def func2(a,b):
    print('ok~~~~~2222',a,b)
​
# 3.无参有返回值
def func3():
    print('ok~~~33333')
    return  'abc'
​
# 4.有参有返回值
def func4(num1,num2,num3):
    print('ok~~~~~4444',num1,num2,num3)
    return num1 + num2 + num3
​
print('end')
​
​
'''
注意:
    1.函数名就相当于变量名,字母尽量小写,不同单词之间使用下划线分隔
    2.当函数定义完毕之后,只有当该函数被使用【被调用】的时候,函数【函数体】才会被执行
    3.函数的定义就相当于将指定的函数加载到计算机内存中
'''
3.调用
"""
a.函数的定义
def  函数名(形参):
    pass
​
b.函数的调用
函数名(实参)
​
函数调用的本质:就是使用函数的过程,当然,同时需要注意传参的问题
传参:在调用函数的过程中,实参给形参赋值的过程
形参:形式参数,出现在函数的声明部分,实际上是一个变量,等待实参赋值【注意:形参本身可以赋值】
实参:实际参数,出现在函数的调用部分,实际上是一个数据【常量,变量,表达式】,目的是为了给形参赋值
"""
"""
a.函数的定义
def  函数名(形参):
    pass
​
b.函数的调用
函数名(实参)
​
函数调用的本质:就是使用函数的过程,当然,同时需要注意传参的问题
传参:在调用函数的过程中,实参给形参赋值的过程
形参:形式参数,出现在函数的声明部分,实际上是一个变量,等待实参赋值【注意:形参本身可以赋值】
实参:实际参数,出现在函数的调用部分,实际上是一个数据【常量,变量,表达式】,目的是为了给形参赋值
"""
​
# 1.无参无返回值
# 注意1:一定要先定义函数,然后再调用函数
# func1()    # NameError: name 'func1' is not defined
# 注意2:在代码执行的过程中,一旦遇到某个函数的调用,则会先执行对应函数中的代码块,函数执行完毕之后,回到调用函数的地方,代码继续向下执行
print('start~~~~~')
def func1():
    print('ok~~~11111')
# 注意3:形参为空,则调用函数的时候,实参也为空,但是,()不能省略
func1()
print('end~~~~~~')
​
# 2.有参无返回值
def func2(a,b):
    print('ok~~~~~2222',a,b)
# 注意4:形参不为空,则调用函数的时候,实参也不能为空
# func2()  # TypeError: func2() missing 2 required positional arguments: 'a' and 'b'
func2(10,20)
​
# 3.无参有返回值
def func3():
    print('ok~~~33333')
    return  'abc'
# 注意5:如果一个函数有返回值,当函数调用完毕,函数的返回值就可以在后面的代码中使用
r3 = func3()   # r3中存储的是func3函数调用完毕之后的返回值
print('返回值:',r3)
​
# 调用函数之后,直接输出函数的返回值
print(func1())      # 无返回值,默认为None
print(func3())      # 有返回值,为abc
​
# 4.有参有返回值
def func4(num1,num2,num3):
    print('ok~~~~~4444',num1,num2,num3)
    return num1 + num2 + num3
r4 = func4(3,34,67)
print(r4)
​
print('*' * 30)
​
# 5.函数之间可以相互调用
def f1():
    f2()
    print('1111')
def f2():
    print('222222')
    f3()
def f3():
    print('333333')
​
f1()   # 该段代码执行的入口
# 231
​
# 6.问题代码
# a.恶意调用
# def a():
#     print('aaaaaa')
#     a()
# a()
​
# b.
def b():
    print('bbbb')
    c()
def c():
    print('ccccc')
    b()
​
b()
4.参数一

参数分类:

  • 必需参数

  • 默认参数

    # 1. 必需参数/必须参数
    # 注意:必须参数,实参必须传参,实参和形参的数量保持一致
    def func1(num1,num2):
        print(num1,num2,num1 + num2)
    func1(34,3)
    ​
    # 注意:调用函数传参的过程中,要注意需要的数据类型
    def func2(name,age):
        print('姓名:%s,年龄:%d' % (name,age))
    # func2('张三','18')  # TypeError: %d format: a number is required, not str
    func2('张三',18)
    ​
    # 注意:name:str表示给name参数声明类型
    # ->int表示返回值类型为int
    def func3(name:str) -> str:
        print('333333')
    func3('fafgqg4')
    ​
    # 2. 默认参数
    def func1(num1=0,num2=0):
        print(num1,num2,num1 + num2)
    # 如果形参有默认值,则调用函数的时候根据需要可以不传参
    func1()
    func1(10)
    func1(10,20)
    ​
    # 注意
    def func1(num1,num2=0):
        print(num1,num2,num1 + num2)
    func1(7)
    func1(7,10)
    ​
    # 多个参数,部分为必须参数,部分为默认参数,一定要将必须参数书写在默认参数的前面non-default argument follows default argument
    # 错误写法
    # def func1(num1- 关键字参数
    - 不定长参数【可变参数】
    ​
    【面试题】简述值传递和引用传递的区别
    ​
    值传递:传参的时候,传递的是不可变的数据类型,如:int/float/str/tuple/bool,当形参发生修改【修改的是变量的指向】,对实参没有影响
    ​
    引用传递:传参的时候,传递的是可变的数据类型,如:list/dict/set等,当形参中的元素发生修改【修改列表,字典等可变数据类型中的元素】,则实参会随着修改
    =0,num2):
    #     print(num1,num2,num1 + num2)

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值