python day1 函数

news2024/11/26 15:01:04

文章目录

  • 前言
  • 一、python函数
  • 二、定义函数
  • 三、函数返回值
  • 四、实例
  • 五、变量作用域
  • 六、参数扩展
    • 1、默认值参数
    • 2、顺序参数,关键词参数
    • 3、可变参数
    • 4、可变关键词参数
    • 5、解包操作
  • 七、函数类型的参数
  • 八、高阶函数
  • 九、匿名函数
  • 十、递归


前言


看深度学习的代码时,看到类和方法以及一些装饰符,才发现自己基础这么薄弱,有必要多学习几次基础知识

一、python函数

函数其实就是有一个特定功能的代码段。
比如print()
对于已经包装好的函数,我们只需要通过函数名(参数)来调用即可
对于函数调用时,我们需要注意:
(1)函数名是什么。
(2) 函数调用时我们是否需要传入参数。
(3)函数是否由返回值以及函数的返回值是什么。
例如:
input函数我们可以提供参数,也可以不提供参数,input()函数有返回值。我们可以通过一个变量来接受,也可以让其直接参与运算。
比如 len(s) len()函数是必须要有参数的。
print()可以有多个参数,参数要用逗号分隔开。默认print不同参数用一个空格分隔开,且自动换行,我们可以根据end=“”,sep=""来进行调整。
其实函数调用时我们传入的参数就是我们给函数的数据,函数的功能已经有了,只是我们传入的值不同罢了。

二、定义函数

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

函数在定义时 要注意函数的命名规则,参数个数。
对于参数,我们可以不用指定其类型,但是如果想要提示,也可以指定类型。
比如

def say_hi(a:str):
    """
    huaxian
    """
    print(a)
    

如果我们指定了函数类型,我们在IDE中就可以自动得到字符串的一些函数。
但是我们只是指定了其类型,并不是限定只能是字符串。a也可以是其他类型。

三、函数返回值

函数可以有返回值,函数的返回值就是函数执行之后的结果,函数也可以有多个返回值,写在return后,用逗号分隔开。return可以提前结束函数。

当函数有多个返回值时,我们可以用一个变量来接收,此时是一个元组类型,也可以用对应数量的多个变量来接收。

def say_hi():
    """
    huaxian
    """
    return "a","b","c"
d=say_hi()
print(d)

在这里插入图片描述

四、实例


这里编写了一个日历代码

def get_week_with_date(y,m,d):
    '''
    根据日期获得星期几
    '''
    if m==1 or m==2:
        y-=1
        m+=12
    return (d+2*m+3*(m+1)//5+y+y//4-y//100+y//400+1)%7
def is_leap_year(y):
    '''
    判断是否是闰年
    '''
    if (y%400==0) or (y%4==0 and y%100!=0):
        return True
    return False
def get_days_with_month(m,y):
    '''
    获得该月有几天
    '''
    if m in[1,3,5,7,8,10,12]:
        return 31
    elif m in[4,6,11]:
        return 30
    else:
        return 27 if is_leap_year(y) else 28
# year=int(input("请输入年份:"))
# month=int(input("请输入月份:"))
year=2023
month=4
day=get_days_with_month(month,year)
print("一 二 三 四 五 六 日")
print("-"*20)
for i in range(1,day+1):
    w=get_week_with_date(year,month,i)
    if i==1:
        print(f"{' '*(w-1)*3}",end="")
    else:
        if w==1:
            print("")
    print(f"{i:2d}",end=" ")

在这里插入图片描述

五、变量作用域

有局部变量 local
和全局变量 global
局部变量只能在函数内部使用以及修改。
而全局变量可以在函数内外使用,可以在函数外修改,如果要在函数内修改全局变量的值必须加上 global

i=0
def f():
    i=22
    print(i)
f()
print(i)

22
0

i=0
def f():
    global i
    i=22
    print(i)
f()
print(i)

22
22

六、参数扩展

1、默认值参数

在定义函数时,我们可以给参数加上默认值,但是注意,默认值参数是从后往前依次设置的,若后边的值没有默认值,则前面的参数也不能设置默认值。

def f(a,b=0,c=0):
    print(a,b,c)
f(1)

b可以设置默认值的前提是 c已经设置了默认值。

2、顺序参数,关键词参数

通常,如果我们不指定,则就是顺序参数。
但是我们也可以使用关键词参数,需要注意的是:一旦一个参数使用了关键词参数,则后边的参数都要使用关键词参数。
错误示例:
如果b使用了关键词参数,则c也要使用关键词参数。

def f(a,b,c):
    print(a,b,c)
f(12,b=12,12)

使用关键词参数可以打乱赋值顺序。关键词参数也可以和默认值参数联合:

def f(a,b=2,c=0):
    print(a,b,c)
f(12,c=1)

12 2 1

3、可变参数

在定义函数时,我们可以在形参前加上一个*,即可变为可变参数。
可变参数可以和普通参数结合使用。
可变参数前的普通参数不能使用关键词赋值,因为只要使用了关键词参数,其后边的所有参数都必须使用关键词参数,而可变参数是不能使用关键词参数的。可变参数之后的普通参数必须使用关键词参数

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

(3,4)

4、可变关键词参数

可变关键词参数必须出现在参数的最后一个位置。
可变关键词参数可以与可变参数和普通参数一起使用
可变参数前的普通参数必须使用顺序赋值。

def f(a,b,*arg,d,**kwarg):
    print(arg)
    print(kwarg)
    for k,v in kwarg.items():
        print(k,v)
f(1,3,4,c=1,e=1,d=2)

(4,)
{‘c’: 1, ‘e’: 1}
c 1
e 1

5、解包操作

所有可迭代对象都有解包操作。
比如字符串,元组,列表,字典。
函数调用时的*与 **和函数定义时的不同。

函数调用时的*和 **表示为可迭代对象解包。
* *表示为字典解包
* 表示为其它的可迭代对象解包

七、函数类型的参数

函数也可以作为一个参数来传递,至于有什么用处,可以见下面这个例子。
一个函数只实现一个具体的功能,但如果我们想在其去实现其它功能,我们就可以将函数作为一个参数类型。

import datetime
#这里就是以函数为参数,一个函数往往只实现一个功能,这样子做可以让我们减少参数修改
#如果开始时要做的功能不一样,我们只用传入该函数即可,而不用去修改计时器函数
def timer(t,start,end):
    '''
    实现一个计时器功能,在计时开始时我们去实现start函数功能
    计时结束后,我们去实现end函数功能
    :param t:  计时器时间
    :param start:  开始要执行的函数
    :param end:  结束要执行的函数
    :return: 
    '''
    time=datetime.datetime.now()
    if start:
        start()
    while True:
        now=datetime.datetime.now()
        if (now-time).seconds>=t:
            break
    if end:
        end()
def start():
    print("稍等两秒钟")
def end():
    input("可以了,请输入密码:")
timer(2,start,end)

八、高阶函数

在函数内部定义一个函数,且返回,叫做闭包。

def counting(count):
    def fn():
        nonlocal count
        count-=1
        if count<0:
            return
        return count
    return fn
a=counting(5)
b=counting(3)
print(a())
print(a())
print(a())

4,3,2

调用counting函数时,首先把count传入,接着 def fn() ,return fn;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JgcrTeUv-1685573927516)(nul
把count的值以及fn函数本身打包,返回给了a,是一个环境变量。
b也是一个环境,a和b是互不影响的,所以可以同时设置多个计时器。

九、匿名函数

对于有些简单函数,我们可以不必单独定义一个函数。
比如
def fn(x):
return x2
此时我们可以使用匿名函数。
lambda x:x
2
这和上边的函数功能一致。
匿名函数 都要有lambda标识,不必有函数名,且冒号后边的就是返回值,所以不必写return。匿名函数的参数和普通函数的参数一样,但是匿名函数的参数不能使用指定类型的操作,会和后边的冒号冲突。

十、递归

在函数体内调用自身。

def fn(a):

    if a<=1:
        return 1
    else:
        return fn(a-1)*a
fn(3)

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

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

相关文章

SO21434 持续进行的网络安全(五)

目录 一、概要 二、目标 三、网络安全监控 3.1 输入 3.1.1 先决条件 3.1.2 进一步支持信息 3.2 要求和建议 3.3 输出 四、网络安全事件评估 4.1 输入 4.1.1 先决条件 4.1.2 进一步支持信息 4.2 要求和建议 4.3 输出 五、漏洞分析 5.1 输入 5.1.1 先决条件 5.…

Sentinel如何使用滑动窗口进行限流和降级,请看这篇文章分享

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将详细介绍如何Sentinel如何使用滑动窗口进行限流和降级&#xff0c;后续文章将详细介绍其他知识。 如果文章有什么需要改进的地方还请大佬不吝赐教&#x1f44f;…

环境感知算法——3.PSMNet基于Kitti数据集训练

1. 前言 PSMNet的核心思想是通过金字塔结构来捕捉不同尺度的特征信息&#xff0c;从而提高视差估计的精度。其亮点在于&#xff1a;&#xff08;1&#xff09;使用了金字塔形的卷积神经&#xff08;SPP module&#xff09;网络来提取不同尺度的特征信息&#xff1b;&#xff0…

【UR机械臂ros通讯前的示教器网络配置】

1. 前言 欢迎大家阅读2345VOR的博客【D435i深度相机YOLO V5结合实现目标检测】&#x1f973;&#x1f973;&#x1f973;2345VOR鹏鹏主页&#xff1a; 已获得CSDN《嵌入式领域优质创作者》称号&#x1f47b;&#x1f47b;&#x1f47b;&#xff0c;座右铭&#xff1a;脚踏实地&…

《新程序员005:开源深度指南新金融背后的科技力量》

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰来写书评啦&#xff0c;尽管再忙&#xff0c;也不能不读书&#xff0c;下面&#xff0c;就让小雅兰来带你们走进《新程序员005&#xff1a;开源深度指南&新金融背后的科技力量》这本书的世界吧&#xff01;&#…

安科瑞医用隔离电源系统在浙江某医院项目中的应用

【摘要】介绍该三级乙等综合医院采用安科瑞医用隔离电源系统&#xff0c;使用分体配电柜安装方式&#xff0c;从而实现将TN系统转化为IT系统&#xff0c;以及系统绝缘情况监测。 【关键词】医用隔离电源系统&#xff1b;IT系统&#xff1b;绝缘情况监测&#xff1b;三级乙等综合…

华为OD机试真题 Java 实现【最差产品奖】【2023Q1 200分】

一、题目描述 A公司准备对他下面的N个产品评选最差奖,评选的方式是首先对每个产品进行评分,然后根据评分区间计算相邻几个产品中最差的产品。评选的标准是依次找到从当前产品开始前M个产品中最差的产品,请给出最差产品的评分序列。 二、输入描述 第一行,数字M,表示评分…

chatgpt赋能python:用Python编写软件能够带来哪些SEO优势?

用 Python 编写软件能够带来哪些 SEO 优势&#xff1f; Python 是一种高级编程语言&#xff0c;它的简洁性和易学性让 Python 成为现今最受欢迎的编程语言之一&#xff0c;适用于各种类型的编程任务&#xff0c;并且可以轻松地生成各种种类的软件。在构建网站和应用程序时&…

黑马Redis视频教程实战篇(四)

目录 一、秒杀优化 1.1、秒杀优化-异步秒杀思路 1.2、秒杀优化-Redis完成秒杀资格判断 1.3、秒杀优化-基于阻塞队列实现秒杀优化 二、Redis消息队列 2.1、认识消息队列 2.2、基于List实现消息队列 2.3、基于PubSub的消息队列 2.4、基于Stream的消息队列 2.5、基于Str…

【C++初阶】C++STL详解(一)—— string类

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C初阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 CSTL详解&#xff08;一…

6.3 SpringBoot日志进阶实战 Logback配置详解

文章目录 前言一、Logback入门级配置二、动态指定属性三、动态指定日志级别四、指定配置文件五、滚动记录RollingFIleAppender六、异步记录AsyncAppender总结最后 前言 在上一篇文章中&#xff0c;我和你介绍了SpringBoot快速入门Slf4j Logback实战&#xff0c;遗留的问题是如…

数据中心末端配电的数字化方案及设备选型

普通PDU和智能PDU有什么区别&#xff1f; 机架安装配电盘或机架配电单元 (PDU) 是一种配备许多插座的设备&#xff0c;可将电力分配给位于数据中心机架或机柜内的服务器、存储设备和网络设备。领先的分析公司 IHS 将它们分为两大类&#xff1a; 1) 基本 PDU 提供可靠的配电。 2…

【2023 · CANN训练营第一季】TIK C++算子开发入门 第一章——TIK C++算子开发入门

1.TIK C介绍 TIK C是一种使用C/C作为前端语言的算子开发工具&#xff0c;通过四层接口抽象、并行编程范式、孪生调试等技术&#xff0c;极大提高算子开发效率&#xff0c;助力AI开发者低成本完成算子开发和模型调优部署 使用TIK C开发自定义算子的优势&#xff1a; (1)C/C原语…

如何编写代码审查文档

一、前言 代码审查(Code Review)是开发流程中非常重要的一个环节&#xff0c;可以帮助发现并改正代码中的错误&#xff0c;提高代码质量&#xff0c;也是共享知识、熟悉代码的好机会。 最近功能开发完毕需要做代码审查&#xff0c;发现国内很多公司不强制要求编写代码审查文档…

【Linux内网穿透】】Linux本地搭建GitLab服务器 - 内网穿透远程访问

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar内网穿透5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 转载自cpolar极点云文章&#xff1a;Linux搭建GitLab私有仓库&#xff0c;并内网穿透实…

chatgpt赋能python:Python的就业前景——解析云计算与Python的结合

Python的就业前景——解析云计算与Python的结合 Python是一种高级编程语言&#xff0c;具有高度的可读性和简洁性&#xff0c;并已成为Web和大数据的主流语言之一。Python广泛应用于数据科学&#xff0c;机器学习&#xff0c;Web开发&#xff0c;游戏开发和金融等领域&#xf…

Linux_epoll

Linux_epoll 思考:高效的餐厅服务如何实现?Epoll - Reactor 设计模式Epoll 与 Reactor 设计模式的关系Reactor优点Epoll - IO多路复用的用法web_server示例代码水平触发和边缘触发思考:高效的餐厅服务如何实现? 一个顾客来就餐,一个服务员在顾客点菜期间全程陪同服务! 一个…

并发编程总结

synchronized synchronized有如下3种使用方式 普通同步方法&#xff0c;锁是当前实例对象 静态同步方法&#xff0c;锁是当前类的class对象 同步方法块&#xff0c;锁是括号里面的对象 当一个线程访问同步代码块时&#xff0c;需要获得锁才能执行&#xff0c;当退出或者抛…

chatgpt赋能python:Python修改BIOS:一篇专业的SEO文章

Python修改BIOS&#xff1a;一篇专业的SEO文章 介绍 BIOS&#xff08;Basic Input/Output System&#xff09;是计算机中的核心程序&#xff0c;它负责启动电脑并管理硬件。一旦发现硬件问题&#xff0c;BIOS会通知用户或操作系统。它还可以设置系统的参数&#xff0c;例如时…

Node.js安装教程(npm搭建) - Window

择心】向大家介绍安装Node.js ( npm搭建 ) 一、安装流程 进入Node.js 去下载一个安装包。 双击下载好的应用程序,弹出安装界面并点击Next&#xff0c; 接受协议&#xff0c;点击Next&#xff0c; 更改默认安装路径&#xff0c;点击Next&#xff0c; 会默认添加到Path环境…