【python】函数的使用

一、函数与方法的区别

  • 直接调用的是函数
  • 通过对象点出来的是方法

在Python中,函数和方法都是一段可重复使用的代码块,可以执行特定的任务。它们之间的区别在于它们的调用方式和应用场景。

函数是独立的代码块,可以通过函数名直接调用。函数可以接受输入参数,并返回一个结果。函数可以在任何地方定义,不依赖于类或对象。

方法是类中的函数,与特定的对象关联。方法必须通过对象或类进行调用。方法可以访问对象的属性,并对其进行操作。在调用方法时,方法自动传入关联的对象作为第一个参数,通常被称为 self。

可以将函数视为独立的工具,而方法更像是与对象密切相关的行为。

下面是函数和方法的使用:

python 复制代码
# 函数示例:
def calculate_sum(a, b):
    return a + b

result = calculate_sum(3, 4)
print(result)  # 输出:7

# 方法示例:
class Calculator:
    def __init__(self, value):
        self.value = value

    def add(self, number):
        self.value += number

    def get_value(self):
        return self.value

# 创建 Calculator 对象
calculator = Calculator(10)

# 调用方法
calculator.add(5)
result = calculator.get_value()
print(result)  # 输出:15

二、函数的定义

  • 使用关键字 def 来进行函数定义,后面指定函数名,还可在括号内指出参数。
  • 在Python中,函数是一段可重复使用的代码块,用于执行特定的任务。函数通常接受输入参数,并根据参数执行相应的操作,并最终返回一个结果。
    函数的定义通常包括以下几个部分:
  1. 函数头:函数头包括关键字 def,后跟函数名和一对圆括号 ()。函数名是我们给函数起的名称,用于标识和调用函数。括号内可以包含参数,用于接收函数调用时传递的输入值。

  2. 函数体:函数体是函数的主要部分,包括一组执行特定任务的语句。函数体通常由缩进块组成,用于标识函数体的范围。在函数体中,可以用来处理参数、执行操作,并最终返回结果。

  3. 返回值:函数可以选择性地返回一个结果。使用关键字 return 后跟要返回的值,可以将该值传递给函数的调用者。如果没有明确指定返回值,则函数默认返回 None

下面是函数定义示例:

python 复制代码
def greet(name):
    """打印欢迎信息,使用传入的名字"""
    print("Hello, " + name + "!")

# 调用函数
greet("Alice")  # 输出:Hello, Alice!

在以上示例中,greet 是一个函数,接受一个参数 name,用于打印一条欢迎信息。在函数体内,使用 print 语句将欢迎信息输出到控制台。然后,我们调用函数 greet,并将参数 "Alice" 传递给它。

【注意】 函数定义后,可以在程序的任何地方调用函数,以重复执行其中的代码块。

定义一个函数,输出两个数字相加的结果

python 复制代码
def res(a, b):
 print(f'a={a}')
 print(f'b={b}')
 print(f'结果={a + b}')
 res(1, 2)
  • Python对于参数的传入是没有类型限制的
  • 不过可以通过给参数添加类型,提示调用时应传入的类型
python 复制代码
res(a: int, b: int)

三、传参的几种方法

  1. 位置传参

    python 复制代码
    res(1, 2)
  2. 关键字传参

    python 复制代码
    res(a=1, b=2)
  3. 缺省参数

    python 复制代码
    res(a: int, b: int = 10)
     res(1)

    参数具备默认值的时候可以不传,具备默认值的参数需要放在没有默认值的参数后面

  4. 可变参数

    python 复制代码
    def res(*nums: int):
     val = 0
     for i in nums:
     val += i
     print(val)
    python 复制代码
    def res(**nums: int):
     val = 0
     for i in nums.values():
     val += i
     print(val)

四、函数的返回值

  • 返回值不限类型,所以不需要指定返回类型
  • 使用 return 关键字
  • 可以通过元组的形式返回多个值

编写一个函数,接受多个参数,返回最大值,最小值与总和

python 复制代码
def res(*nums: int):
 val = 0
 val_max = nums[0]
 val_min = nums[0]
 for i in nums:
 val += i
 val_min = i if i < val_min else val_max;
 val_max = i if i > val_max else val_max;
 return val, val_min, val_max

五、函数的注释

查看python中关于函数的说明: help()

python 复制代码
def res(a, b):
 """
两数相加
:param a: 数字
:param b: 数字
:return: 结果
"""
 return a + b

六、其他

1、函数嵌套:

  • 定义求和函数
  • 在求和函数上完成平均值函数

2、变量作用域:

  • 全局变量
  • 局部变量

3、递归调用:

计算1+n的和

python 复制代码
def res(target: int):
 if target <= 0:
 return '0'
 if target == 1:
 return 1
 return target + res(target - 1)

计算斐波那契数列

python 复制代码
def res(target: int):
 if target <= 0:
 return '0'
 if target <= 2:
 return 1
 return res(target - 1) + res(target - 2)

七、Lambda表达式

相当于匿名函数,可以简化目前的函数,在 java 中的流式操作与函数接口有体现。

python 复制代码
//常规
Runnable r1=new Runnable() {
 @Override
 public void run() {
 System.out.println("你好");
 }
 };
 //lambda表达式
Runnable r2=()->{
 System.out.println("你好");
 };

但是 python中的表达式只能存在一行代码,使用 python 中的lambda来简化函数

python 复制代码
# 未简写
def res():
 return 10
 # 简写
res = lambda: 10
形式: lamdba 参数 : 执行操作/返回值

编写一个函数,接受两个参数,并返回最大值

python 复制代码
def res(a, b):
 return a if a > b else b
 res = lambda a, b: a if a > b else b

使用 lambda 对字典数据进行排序

python 复制代码
persons = [
 {"name": "张三", "age": 20},
 {"name": "李四", "age": 17},
 {"name": "王麻子", "age": 21}
 ]
 persons.sort(key=lambda p: p['age'], reverse=True)

将一个元素中所有的值翻倍 map

python 复制代码
 nums = [1, 2, 3, 4, 5, 6, 7]
 m = map(lambda a: a * 2, nums)
 for i in m:
 print(i)

让集合中的对应位置进行相加

python 复制代码
nums1 = [1, 2, 3, 4, 5, 6, 7]
 nums2 = [2, 3, 4, 5, 6, 7, 8]
 m = map(lambda a, b: a + b, nums1, nums2)
 for i in m:
 print(i)

对集合进行筛选

python 复制代码
nums = [1, 2, 3, 4, 5, 6, 7]
 f = filter(lambda a: a > 5, nums)
 for i in f:
 print(i)
相关推荐
陌小呆^O^8 分钟前
Cmakelist.txt之win-c-udp-server
c语言·开发语言·udp
Gu Gu Study15 分钟前
枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
java·开发语言
时光の尘30 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
以后不吃煲仔饭44 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师44 分钟前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
前端拾光者1 小时前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化
程序猿阿伟1 小时前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链
傻啦嘿哟1 小时前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
大数据编程之光1 小时前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
初九之潜龙勿用1 小时前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net