python中的函数与变量

news2025/1/15 12:47:19

一、函数

python中函数的基本格式则为:def+函数名+参数名+函数体+返回,python作为一门面向对象的语言,同样可分为类函数、实例函数。

# 定义一个函数
def add(x, y):
    """
    函数的说明
    :param x: 参数x的作用
    :param y: 参数y的作用
    :return: 函数返回什么
    """
    return x + y

如果想要输出某个函数的描述,可以使用doc函数

# 可以使用函数名.__doc__输出函数描述
print(add.__doc__)

1、函数分类

python中函数可分为类函数、实例函数,除此一个类中默认还有构造函数。
(1)实例函数
使用def定义的函数都是实例函数,实例函数的第一个参数必须是self,但在调用函数时,self不用传。实例函数使用实例调用,调用时现需要实例化。

class Cat:
    """
    定义一个猫的类
    """

    # 定义实例函数
    def kind(self, x):
        """
        猫叫的名字
        """
        print("这是一只" + x)

    def age(self, n):
        """
        猫的年龄
        """
        print("这只猫" + str(n) + "岁")


kit = Cat()
kit.kind("布偶")
kit.age(3)

(2)类函数
类函数定义时,需要使用@classmethod,且类函数的第一个参数必须是clscls表示类本身,调用类函数时不用传。类函数使用类调用,调用方式为类.函数,不需要实例化。

class Dog:
    """
    定义一个狗的类
    """

    # 定义一个狗叫声的类函数
    @classmethod
    def beak(cls):
        """
        狗叫的声音
        """
        print("狗会汪汪叫")
        
    # 定义一个狗吃食物的类函数    
	@classmethod
    def eat(cls, food):
        """
        狗吃食物
        """
        print("狗吃" + food)

# 调用时不用传入cls参数
Dog.beak()
Dog.eat("骨头")

(3)构造函数
每一个类中都有构造函数,如果没有显式的定义一个构造函数,则使用默认的构造函数。构造函数的函数名为__init__

class bird:
    """
    定义一个鸟的类
    """

    # 显式声明构造函数
    def __init__(self):
        """
        类的构造方法
        """
        print("---这是一个构造函数---")

    def fly(self):
        """
        定义一个类方法
        """
        print("鸟会飞")


a = bird()
a.fly()

2、函数返回

(1)python中定义的函数可以没有参数和返回

def describe():
    print("这是一个简单的描述")

(2)python中定义的函数可以没有参数但仍有返回

def describe():
    return "这是一个简单的描述"

(3)python中定义的函数可以有参数但没有返回

def describe(m, n):
    print("这是一个简单的描述")

(4)python中函数可以返回多个值

def describe(m, n):
    return m + n, m * n

3、函数参数

函数的参数可概括为:位置参数、默认参数、可变参数列表、可变参数字典
(1)位置参数
调用函数时必须传入的参数,如果没有指定(参数名=值)这样的形式传入,那么就按顺序一一对应;如果指定(参数名=值),则按参数名对应传入,例如:add(1,2)、add(x=1,y=2)、add(y=2,x=1)、add(1,y=2),但不支持add(y=2,1)

def add(x, y):
    return x + y
    
# 不同的调用传参
print(add(1, 2))
print(add(x=1, y=2))
print(add(y=2, x=1))
print(add(1, y=2))

(2)默认参数
被调用函数有默认值的参数,调用函数时,可以不传入参数,此时使用默认值;默认参数必须定义在位置参数之后,传入参数可以按顺序传入,也可以使用(参数名=值)的形式传入

# a为位置参数,b=3, c=2为默认参数
def add(a, b=3, c=2):
    return a + b + c
    
# 结果是6
print(add(1))

# 结果是5
print(add(1, 2))

# 结果是4
print(add(1, b=1, c=2))

# 结果是4
print(add(1, c=2, b=1))

# 结果是6
print(add(1, c=2))

默认参数建议指向不变对象,如果初始值为空,可以赋值None

def age(self, n=None):
    """
    猫的年龄
    """
    print("这只猫" + str(n) + "岁")

(3)可变参数列表(*args)
将传入的参数作为元组
如果默认参数出现在*args前面,调用函数时,默认参数只能按顺序传入。

def add(x, y, a=1, b=2, *args):
    print(x, y)
    print(a, b)
    print(args)


add(3, 5, 4, 7, 8, 9)

调用结果为:
在这里插入图片描述
如果默认参数出现在*args后面,则调用时必须使用(参数名=值)的形式传入。

def add(x, y, *args, a=1, b=2):
    print(x, y)
    print(a, b)
    print(args)


add(3, 5, 4, 7, 8, 9)

调用结果为:
在这里插入图片描述
默认参数按照(参数名=值)形式传入

def add(x, y, *args, a=1, b=2):
    print(x, y)
    print(a, b)
    print(args)


add(3, 5, 4, 7, 8, 9, a=0, b=0)

调用结果为:
在这里插入图片描述
如果*args传入参数为列表,可使用*列表的方式传入

def add(x, y, *args, a=1, b=2):
    print(x, y)
    print(a, b)
    print(args)

l = [8, 8, 8, 8]

add(3, 5, *l, a=0, b=0)

调用结果为:
在这里插入图片描述
(4)可变参数字典(**kwargs)
传入的键值对参数会被转为字典
如果参数有*args参数,可变参数字典(**kwargs)必须放在其后

def add(x, y, *args, a=1, b=2, **kwargs):
    print(x, y)
    print(a, b)
    print(args)
    print(kwargs)


add(3, 5, 6, 6, a=4, b=7, 地址="上海")

调用结果为:
在这里插入图片描述
如果 **kwargs传入参数为字典,可使用**字典的方式传入

def add(x, y, *args, a=1, b=2, **kwargs):
    print(x, y)
    print(a, b)
    print(args)
    print(kwargs)

d = {"name": "Jim", "age": 18, "sex": 'f'}

add(3, 5, 6, 6, a=4, b=7, **d)

调用结果为:
在这里插入图片描述

二、变量

从变量的作用域划分,变量分为全局变量和局部变量,从变量的调用方式划分,变量分为类变量和实例变量。

1、全局变量与局部变量

全局变量即在整个模块中均能使用的变量,用global引用,局部变量即为只在当前函数中能够使用的变量。

animal = "动物"  # 定义全局变量

class Cat:
    """
    定义一个猫的类
    """
    def age(self, n=None):
        """
        猫的年龄
        """
        global animal  # 引用全局变量
        cat = "猫"  # 定义局部变量
        print(animal+cat + str(n) + "岁")

2、类变量与实例变量

类变量即为定义在类中且在函数体之外的变量,所有类的实例化对象都共享类变量,类变量通常不作为实例变量使用;实例变量则是在构造函数中使用self定义的变量,实例变量尽量在实例和实例函数中使用。

class bird:
    """
    定义一个鸟的类
    """
    leg = "两只爪子"  # 类变量

    # 显式声明构造函数
    def __init__(self):
        """
        类的构造方法
        """
        self.voice = "叽叽咋咋"  # 实例变量
        print("---这是一个构造函数---")

    def Honking(self):
        """
        定义一个类方法
        """
        print(self.voice)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

碱性环境吸钯树脂技术

汞和贵金属的选择性去除回收离子交换树脂 Tulsimer CH-95S 是一款为了从工业废水中去除回收汞和贵金属而开发的螯合树脂。 Tulsimer CH-95S是一款拥有聚乙烯异硫脲官能基的大孔树脂,这种树脂对汞有的选择性。它也选择其他的贵金属,如黄金,铂…

消息收发弹性——生产集群如何解决大促场景消息收发的弹性降本诉求

作者:宸罡 产品介绍—什么是消息收发弹性 大家好,我是来自阿里云云原生消息团队的赖福智,花名宸罡,今天来给大家分享下阿里云 RocketMQ5.0 实例的消息弹性收发功能,并且通过该功能生产集群是如果解决大促场景消息收发…

JS in CSS:一键支持响应式布局

前言 如今网速不再成为适配移动端时选择响应式设计的限制因素,在资源充足的条件下,针对各端各自设计应用界面能达到应用最佳用户体验,毕竟不同类型的设备交互体验是不同的,但在团队前端资源拮据时,相比无脑自适应&…

基于Java+jquery+SpringMVC校园网站平台设计和实现

基于JavajquerySpringMVC校园网站平台设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联…

临时白名单

临时白名单介绍 相关常量 临时白名单列表介绍 前两个临时白名单可以豁免后台启动Service、豁免uid后台1min后进入idle状态等,最后一个临时白名单可以后台启动FGS。 // 由于高优先级消息而暂时允许逃避后台检查的一组应用程序 ID,短信/彩信 Composite…

【Vue路由】路由守卫、生命周期钩子、路由器工作模式

文章目录生命周期钩子案例实现总结路由守卫全局路由守卫独享守卫组件内守卫总结路由器的两种工作模式总结生命周期钩子 我们在News组件列表中的第一行加一个渐变文字。同时原来的路由缓存功能也要保存。 案例分析: 我们实现这个渐变的效果,是使用周期定…

Go select底层原理

在对Channel的读写方式上&#xff0c;除了我们通用的读 i <- ch, i, ok <- ch&#xff0c;写 ch <- 1 这种阻塞访问方式&#xff0c;还有select关键字提供的非阻塞访问方式。 在日常开发中&#xff0c;select语句还是会经常用到的。可能是channel普通读写的使用频率比…

基于Node.js和vue的博客系统的设计与实现

摘要随着互联网技术的高速发展&#xff0c;人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以在线发布博客文章&#xff0c;简单、快捷的方便了人们的日常生活。同样的&#xff0c;在人们的工作生活中&#xff0c;也需要互联网技术来…

【Java寒假打卡】Java基础-日期类对象

【Java寒假打卡】Java基础-日期类对象Date概述Date类常用成员方法SimpleDateFormat案例:秒杀活动案例&#xff1a;在当前时间加上一天时间JDK8新增日期类获取时间中的一个值LocalDateTime转换方法LocalDateTime格式化和解析LocalDateTime 增加或者减少时间的方法修改时间的方法…

【JAVA程序设计】(C00099)基于SpringBoot的外卖订餐小程序(原生开发)

基于SpringBoot的外卖订餐小程序&#xff08;原生开发&#xff09;项目简介项目获取开发环境项目技术运行截图项目简介 基于SpringBootvue开发的原生外卖点餐微信小程序&#xff0c;包括用户小程序登录以及网页端的商家登录。本系统分为三个权限&#xff1a;商家、用户和游客&…

第七章.机器学习 Scikit-Learn—最小二乘法回归,岭回归,支持向量机,K_means聚类算法

第七章.机器学习 Scikit-Learn 7.1 Scikit-Learn简介 Scikit-Learn简称(SKlearn)是Python的第三方模块&#xff0c;是机器学习领域当中知名的Python模块之一&#xff0c;对常用的机器学习算法进行了封装&#xff0c;包括回归(Regression)&#xff0c;降维(Dimensionality Redu…

地质灾害监测预警系统构成,功能,监测设备介绍

平升电子地质灾害监测预警系统&#xff0c;应用平升物联网遥测终端机、专业测量仪器和传感设备、预警广播设备、地质灾害监测预警平台&#xff0c;基于4G/5G/NB-IoT/LoRa/光纤/北斗卫星通信网络&#xff0c;实时在线监测地质灾害隐患点的地表位移、地表裂缝、深部位移、降雨量、…

Simulink-过零检测与代数环

过零检测过零检测即通过Simulink为模块注册若干过零函数&#xff0c;当模块变化趋势剧烈时&#xff0c;过零函数将会发生符号变化。每个采样点仿真结束时&#xff0c;Simulink检测过零函数是否有符号变化&#xff0c;如果检测到过零点&#xff0c;则Simulink将在前一个采样点和…

院内导航方案怎么样,低成本的智慧医院室内导航一站式解决方案

很多智慧医院的方案里都提到了院内导航&#xff0c;它俨然已经成为智慧医院套餐中的“招牌菜”&#xff0c;甚至被打上了“导航神器”的绰号&#xff0c;其中电子地图作为大家最喜闻乐见的高效应用形式&#xff0c;可以高效的为病患提供导医服务&#xff0c;实现院内导航功能&a…

集群多机ROS通信中间件:swarm_ros_bridge

最近写了一个无线网络环境下&#xff08;比如WIFI&#xff09;多机ROS通信的项目swarm_ros_bridge&#xff1a; https://gitee.com/shu-peixuan/swarm_ros_bridge A lightweight middle interface that enables specified ROS message transmission among swarm robots throu…

国内出海企业常见的跨境网络问题分析及解决方案

经济全球化趋势发展得如火如荼&#xff0c;越来越多的中国企业走出国门&#xff0c;兴起包括跨境电商、虚拟商品、游戏出海等新贸易形式。但在业务开拓过程中&#xff0c;由于远距离传输的特殊性&#xff0c;出海企业经常面临网络传输慢、不稳定、延迟、掉线等网络问题&#xf…

0基础如何开始学习计算机知识?

一、计算机的基本操作 计算机中只有文件和文件夹 计算机中&#xff0c;只有两样东西&#xff0c;文件和文件夹。 文件夹&#xff1a;本身不存储数据内容。文件夹是用来组织和管理文件的。 文件&#xff1a; 所有的txt文本文档&#xff0c;音乐&#xff0c;视频&#xff0c;图…

2022年国外LEAD收入情况

欢迎关注勤于奋每天12点准时更新国外LEAD相关技术这个收入情况&#xff0c;最喜欢关心&#xff0c;最喜欢看的人应该是新手和观望的人最想知道的&#xff0c;LEAD收入只要操作了&#xff0c;赚钱肯定是没问题&#xff0c;我一直这样说&#xff0c;而且我公众号叫勤于奋&#xf…

【Spring(四)】万字详解bean的实例化

文章目录前言1.bean实例化1.1 bean的基础配置1.2 bean的实例化-构造方法1.3 bean的实例化-静态工厂1.4 bean的实例化-实例工厂与FactoryBean总结前言 在上篇文章&#xff0c;我们已经完成了入门案例的学习&#xff0c;在入门案例中&#xff0c;我们讲了三块东西&#xff0c;首先…

《Kotlin核心编程》笔记:函数和Lambda表达式

高阶函数和lambda表达式 函数式语言⼀个典型的特征就在于函数是头等公民——我们不仅可以像类⼀样在顶层直接定义⼀个函数&#xff0c;也可以在⼀个函数内部定义⼀个局部函数&#xff0c;如下所示&#xff1a;所谓的高阶函数&#xff0c;你可以把它理解成“ 以其他函数作为参数…