首页 > 编程语言 >python函数基础

python函数基础

时间:2024-07-20 15:59:36浏览次数:15  
标签:return 函数 python global 基础 var print def

1.函数目的

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。

函数可以封装一定的功能

2.函数的定义

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()

任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

函数内容以冒号 : 起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

Python 定义函数使用 def 关键字,一般格式如下:

def 函数名(参数列表):
    函数体

3.函数的声明

def hello() :
    print("Hello World!")

hello()

def max(a, b):
    if a > b:
        return a
    else:
        return b


a = 4
b = 5
print(max(a, b))

4.函数的调用

def printme(str):
    
    print(str)
    return


# 调用函数
printme("aaaaaa")
printme("cccccc")

5.函数形参与函数实参

 形参 在函数定义时出现在函数小扩号中的变量名
 形参是一个变量 需要使用实参赋值
 实参就是函数调用时小括号中的数值
def wake_up(name,num):
    for i in range(num):
        print(f"{name}你真不醒的嘛")


# 调用一个函数  函数调用
wake_up("李白",2)

6.函数的返回值

函数内部没有return时 则默认返回None
def my_print():
    print(f"李白洗衣液")
print(my_print())

函数内部有return时,函数返回return后的值

def my_print():
    print(f"李白洗衣液")
    return "libai"
print(my_print())

7.函数的参数类型

1.关键字参数

关键字参数即在调用函数时在括号内直接传入参数值

def wake_up(name,n):
    for i in range(n):
        print(f"有{name}")


wake_up("朝", 5)

2.默认参数

当构造函数时,有多个形参,直接定下某些形参的值,

def wake_up(name,n=5):
    for i in range(n):
        print(f"有{name}")


wake_up("朝" )

3.不定长参数

如*args 和**kwargs

加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数,可以称它为元组参数

def wake_up(msg,*args):
    for name in args:
        print(f"{msg} {name} ")

wake_up("下班了","李白","黄一名","张伟")

加了两个星号 ** 的参数会以字典的形式导入,可称其为字典参数它会接收所有除了在形参中出现的关键字参数以外的所有关键字参数

def inim_(n,address="长安",**kwargs):

        print(f"{n}在 {address},{kwargs}")


inim_("李白",inqe="唐朝",queu="宋朝")

8.变量的作用域(global与nonlocal)

作用域是程序中定义变量的区域,决定了这些变量可以被访问的位置。通常,作用域分为两种类型:

  • 局部作用域:在函数内部定义的变量,只能在该函数内部访问。
  • 全局作用域:在函数外部定义的变量,可以在程序的任何地方访问。

global可以将一个变量定义为全局变量,所有函数都可以访问该变量并修改

var = "初始全局变量值"

def modify_global():
    global var  # 声明global_var为全局变量
    var = "修改后的全局变量值"  # 修改全局变量的值

# 使用global关键字访问全局变量
def access_global():
    global var  # 声明global_var为全局变量
    print("访问全局变量:", var)

# 调用函数,展示global关键字的使用
modify_global()
access_global()

nonlocal可以让内层函数也使用外层变量而不是将变量定义为一个全局变量

def outer():
    outer_var = "外层函数变量"

    def inner():
        nonlocal outer_var  # 声明outer_var为非局部变量
        outer_var = "声明后内层函数也可访问外层函数的变量"  # 修改外层函数的变量

    inner()
    print("外层函数访问修改后的变量:", outer_var)


# 调用外层函数,展示nonlocal关键字的使用
outer()

9.递归函数

递归的基本概念

递归函数是指在函数体内调用自身的函数。递归包含两个主要部分:

  1. 基本情况(Base Case):递归结束的条件,防止无限递归。
  2. 递归步骤(Recursive Step):函数调用自身的部分,每次调用都向基本情况靠近。
递归的使用场景

递归通常用于解决可以分解为相似子问题的问题,例如:

  • 数学计算,如阶乘、斐波那契数列。
  • 数据结构的遍历,如树和图的遍历。
  • 搜索和排序算法,如快速排序和归并排序。
  • 图论问题,如最短路径和路径寻找。
递归函数的实现要点
  1. 明确基本情况:确保递归有明确的结束条件。
  2. 确保递归逻辑正确:每次递归调用都应该使问题规模减小,逐步接近基本情况。
  3. 避免重复计算:在可能的情况下,使用记忆化递归或迭代来减少计算量。
计算阶乘

阶乘是递归的经典例子。n的阶乘定义为n * (n-1) * ... * 1,其中0的阶乘为1

def factorial(n):
    # 基本情况
    if n == 0:
        return 1
    # 递归步骤
    else:
        return n * factorial(n - 1)

# 测试阶乘函数
print(factorial(5))  # 输出: 120
斐波那契数列
def fibonacci(n):
    # 基本情况
    if n <= 1:
        return n
    # 递归步骤
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

# 测试斐波那契函数
print(fibonacci(6))  # 输出: 8

10.匿名函数

匿名函数是一种无需定义标识符(名称)的函数或子程序。它们通常用于需要一个函数对象的场合,但函数体只使用一次,无需正式定义一个完整的函数。

  1. 简化代码:在需要简单函数对象时,使用匿名函数可以使代码更加简洁。
  2. 提高可读性:在函数逻辑简单且明确的情况下,匿名函数可以提高代码的可读性。
  3. 临时使用:在需要临时函数对象的场合,如排序、映射或过滤操作。
lambda 形参列表 : 单行表达式

1.使用lambda表达式进行简单的数学运算:
add = lambda x, y: x + y
print(add(5, 3))  # 输出: 8
2.使用lambda表达式作为sorted()函数的键函数
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
# 降序排序
print(sorted(numbers, key=lambda x: -x))  # 输出: [9, 6, 5, 4, 3, 2, 1, 1]
3.使用lambda表达式对字典按照值进行排序:
data = {'apple': 10, 'orange': 20, 'banana': 5, 'grape': 15}
# 按值降序排序
print(sorted(data.items(), key=lambda x: x[1], reverse=True))
# 输出: [('orange', 20), ('grape', 15), ('apple', 10), ('banana', 5)]

11.闭包

闭包是一个函数,它记住了创建时的环境,包括外部作用域中的变量。这意味着即使外部函数已经执行完毕,闭包仍然可以访问这些变量。

闭包由两部分组成:

  1. 函数:闭包本身是一个函数。
  2. 环境:闭包可以访问创建时的外部作用域中的变量。

闭包常用于以下场景:

  • 封装数据:保护数据不被外部直接访问。
  • 延迟计算:在需要时才执行计算。
def make_counter():
    count = 0
    def counter():
        nonlocal count
        count += 1
        return count
    return counter


counter = make_counter()


print(counter())
print(counter())
print(counter())

import random


def fun1():
    
    datas = []

    def fun2():
        datas.append(random.randint(0, 100))
        print("fun2", datas)

    return fun2


r = fun1()
r()
r()
r()
r()

标签:return,函数,python,global,基础,var,print,def
From: https://blog.csdn.net/dhudhj/article/details/140475359

相关文章

  • Python游戏开发实践项目-小恐龙躲避游戏——一个适合python新手练手的项目
    今天我们就来给大家演示下,用Python来自己做一个仿制的“小恐龙游戏”!废话不多说,让我们愉快地开始吧~相关模块:pygame模块;以及一些python自带的模块。环境搭建安装Python并添加到环境变量,pip安装需要的相关模块即可。先睹为快在终端运行如下命令即可:pythonGame7.py......
  • 算法基础课第一章(中)高精度+前缀和+差分
    一、高精度(一)使用高精度的原因在计算机中处理非常大或非常小的数值时,确保计算结果的精确性和准确性。在特定情况下,可以自己实现高精度计算的数据结构和算法,例如使用字符串或数组来表示大数,并实现基本的加、减、乘、除操作。(二)高精度加法1、方法(1)描述:从最低位开始加法计算......
  • python 类
    构造方法init方法说明参数self->指的就是实例对象自己,返回值为空,实际是调用了new方法会生成一个实例对象实例化类的时候系统自动调用init方法进行创建(在调用init方法直接系统自动调用new方法创建对象)对象和初始化如果类没有init方法,系统会调用默认的;如果写了就相当于对init......
  • 一周学完Java基础,第六天,常见容器
    (1)列表List         接口:    java.util.List<>    实现方式:    java.util.ArrayList<>:变长数组    java.util.LinkedList<>:双链表    函数:    add():在末尾添加一个元素    clear():......
  • 使用 Elasticsearch Python SDK 查询 Easysearch
    随着数据分析需求的不断增长,高效查询和分析大数据集变得越来越重要。Easysearch作为一种强大的国产化搜索和分析引擎,同时作为Elasticsearch国产替代方案,支持原生DSL查询语法和SQL查询,确保原业务代码无需调整即可无缝迁移。Easysearch兼容ES7.x现有的SDK和索引存储格......
  • 【组合总和】python刷题记录
    目录思路:回溯法框架:本题中(元素不可重复可复选)如果不重复使用重复使用代码:​拓展1:元素无重复不可复选子集问题:组合问题:全排列问题:拓展2:元素可重复不可复选再--子集问题:PS:润到递归了。下面是超级回溯大法!!!!!思路:使用回溯法解决问题----能够穷举所有解回溯法框架:......
  • 谷粒商城实战笔记-35-前端基础-ES6-模块化
    文章目录一,什么是模块化二,export1.`export`语法2.批量导出3.默认导出三,import1,import语法2,批量导入一,什么是模块化模块化编程是一种软件设计技术,它将程序分解为独立的、可复用的部分,每个部分负责执行特定的功能。这种设计方法在多种编程语言中都有应用,包括Jav......
  • python3 安装Crypto包 出现No module named ‘Crypto‘和No module named ‘Crypto.Ut
       pycrypto、pycrytodome和crypto是一个东西,crypto在python上面的名字是pycrypto,它是一个第三方库,但是已经停止更新三年了,所以不建议安装这个库;这个时候pycryptodome就来了,它是pycrypto的延伸版本,用法和pycrypto是一模一样的;所以,我现在告诉大家一种解决方法--直接安装:pipin......
  • Python中用来排序的方法sort、sorted
    sort与sorted区别:sort是应用在list上的方法,而sorted可以对所有可迭代的对象(他们可以是list、dict、set、甚至是字符串)进行排序操作。list的sort方法返回的是对已经存在的列表进行操作,无返回值,而内建函数sorted方法返回的是一个新的list,而不是在原来的基础上进行......
  • Python教程:json中load和loads的区别
    一.相同点dump和dumps都实现了序列化load和loads都实现反序列化变量从内存中变成可存储或传输的过程称之为序列化序列化是将对象状态转化为可保存或可传输格式的过程。变量内容从序列化的对象重新读到内存里称之为反序列化反序列化是流转换为对象。二.区别1.load......