Day 07 python学习笔记

news2024/11/20 20:23:25

函数


函数的传参

关键字参数

函数调用时,指定参数的名称,即为关键字参数

  • 允许传入0个或者多个含参数名的参数
  • 关键字参数必须放在普通参数的后面
例:
def abc(x,a,b):
    print(x)
    print(a)
    print(b)

abc(100,b=4,a=2)  #其中a,b作为关键字参数可以随意调换位置,
                  #但x作为位置参数必须在关键字参数前面


结果:
100
2
4

命名关键字参数

限定后边的参数必须是以关键字形式传参

例:
def abc(a,b,*,c,d):  #*后边的参数必须为关键字形参
    print(a)
    print(b)
    print(c)
    print(d)

abc(1,2,c = 3,d = 4)



结果:
1
2
3
4

可变参数

可变参数:传入的形参个数是可变的。

1、*参数:常见的*args,args变量指向一个tuple对象

自动接收所有的未匹配的位置参数,到一个tuple对象里

例:
def abc(a,*b):
    print(a)
    print(b)

abc(11)
abc(11,12,13,14,344)


结果:
11
()    #可变参数无传参时默认空元组
11
(12, 13, 14, 344)
 

练习:

如:求一组数字的平方和,参数个数不确定
1、用列表或者元组-------但是调用时,需要先组成列表或者元组
2、可变参数

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum += n * n
    print(sum)

calc(1,2,3,4)



结果:
30

如果要传进的是元组或者列表:
在元组或者列表前面添加(*num):即把num这个list的所有元素作为可变参数传进去

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    print(sum)

num = [1,2,3,4]
calc(*num)


结果:
30

2、**参数:所有未匹配的未知参数存储到一个字典里边去

**kwargs

例:
def abc(a,**b):
    print(a)
    print(b)

abc(10)
abc(10,name="zs")  #必须以关键字参数的形式传入,才能以键值对的形式传出

结果:
10
{}  #无传参,默认空字典
10
{'name': 'zs'}

python参数的解包

参数类型是字符串、列表、元组、集合、字典的时候,可以解包

传递实参时,可以在序列类型的参数前边添加*

*自动将序列中的元素依次作为参数传递

例:
def abc(a, b, c):
    print(a)
    print(b)
    print(c)


abc(*"123")
abc(*[4,5,6])

结果:
1
2
3
4
5
6

注意:字典有点特殊

若要取出字典里的值时(**),必须保证字典的键与函数的传入形参相同,否则会报错

但若只是取出字典里的键时(*),不需要使字典的键与函数的传入形参相同

字典例:
def abc(a, b, c):
    print(a)
    print(b)
    print(c)

d = {
    "a" : "zs",
    "b" : 18,
    "c" : "python"
}

abc(*d)  #一个解包是取出字典里的键
abc(**d) #两个解包是取出字典里的值

参数解包与可变参数一起用

例:
def abc(a,*args):
    print(a)
    print(args)

abc(100,(1,2,3))   #传入元组
abc(100,*(1,2,3))

结果:
100
((1, 2, 3),)
100
(1, 2, 3)

函数递归

我们先来讲一下函数调用函数

函数调用函数

例:
def fun_01():
    print("11111111111")

def fun_02():
    print("22222222222222")
    fun_01()

fun_02()

结果:
22222222222222   #先调用2再调用1
11111111111

递归的定义

如果一个函数内部调用了自己本身,那么这个函数就是递归函数

递归在使用时,注意防止栈溢出。栈的大小是有限的,如果递归调用次数太多,会导致栈溢出

例:

简单的死递归

def fn():
    print("我是递归函数")
    fn()


fn()   #死递归


结果:
  File "D:\python\Day07\10.10\代码\10-函数递归.py", line 48
    a = fibonacci(1000)jiu
                       ^^^
SyntaxError: invalid syntax

因为递归函数必须要有一个出口

如果没有一般计算机递归1000次会报错

当然,我们也可以简单的检查一下我们的递归限制

方法:
import sys
a = sys.getrecursionlimit()
print(a)


结果:
1000

或在终端上:

练习1:

求阶乘

举例:9!

9!=8!*9

9!=7!*8*9

。。。

9!=1*2*3*4*5*6*7*8*9

所以:

n!=(n-1)!*n

递归出口:1

def fact(n):
    if n == 1:
        return 1
    else:
        return fact(n - 1) * n


a = fact(3)
print(a)

结果:
6

但fact(1000):会报错

因为超过了计算机的递归限制,造成栈溢出

尾递归:为了解决递归调用栈溢出的方法。
调用函数时,调用自身本身,并且,return语句不能包含表达式。编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

def fact(n):
    return fact_iter(n, 1)

def fact_iter(num, product):
    if num == 1:
        return product
    return fact_iter(num - 1, num * product)

遗憾的是,大多数编程语言没有针对尾递归做优化,Python解释器也没有做优化,所以,即使把上面的fact(n)函数改成尾递归方式,也会导致栈溢出。

练习2:

编写一个递归函数 fibonacci(n),用于计算斐波那契数列的第 n 个数字

斐波那契数列的定义是:前两个数是 0 和 1,后续的每个数都是前两个数之和

例:1 1 2 3 5 8 13 21

def fibonacci(n):
    if n == 1 or n == 2:  #或n <= 2
        return 1
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)


a = fibonacci(6)
print(a)

结果:
8

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

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

相关文章

软件性能测试-初步分析性能瓶颈

完成工具使用和脚本编写后&#xff0c;剩下的流程是执行和结果分析&#xff0c;以及复测。现在来学学结果分析&#xff0c;主要是要学会判断压力的来源&#xff0c;当响应时间远远超出我们的期望&#xff0c;测试人员如何判断是由于什么导致的过载响应。 一、性能瓶颈出现的表…

Spring Security登录表单配置(3)

1、登录表单配置 1.1、快速入门 理解了入门案例之后&#xff0c;接下来我们再来看一下登录表单的详细配置&#xff0c;首先创建一个新的Spring Boot项目&#xff0c;引入Web和Spring Security依赖&#xff0c;代码如下&#xff1a; <dependency><groupId>org.sp…

竹云荣膺2023粤港澳大湾区高质量发展标杆企业

10月12日&#xff0c;由深圳市前海深港现代服务业合作区管理局指导&#xff0c;广东省粤港澳大湾区产业协同发展联合会&#xff08;简称&#xff1a;湾区产联&#xff09;、香港大湾区工商业联合会主办的“深港合作前海向前”2023粤港澳大湾区高质量发展企业发布会、香港大湾区…

[计算机提升] 环境变量

1.5 环境变量 在Windows系统中&#xff0c;环境变量是一组参数或值&#xff0c;用于配置和控制操作系统的行为。它们用来确定系统的默认设置、执行文件路径以及其他系统行为。环境变量可以被所有的应用程序和命令行工具访问和使用&#xff0c;而不需要每次手动指定路径或设置参…

SELECT COUNT(*) 会造成全表扫描吗?

前言 SELECT COUNT(*)会不会导致全表扫描引起慢查询呢&#xff1f; SELECT COUNT(*) FROM SomeTable 网上有一种说法&#xff0c;针对无 where_clause 的 COUNT(*)&#xff0c;MySQL 是有优化的&#xff0c;优化器会选择成本最小的辅助索引查询计数&#xff0c;其实反而性能…

笔记本触摸板没反应?实用技巧助你成功修复!

笔记本电脑是我们日常工作和学习的得力工具之一&#xff0c;而触摸板作为一个重要的输入设备&#xff0c;对于操作的流畅性至关重要。然而&#xff0c;有时候我们可能会遇到笔记本触摸板没反应的问题&#xff0c;这可能会导致困扰和不便。本文将介绍解决笔记本触摸板无响应问题…

SPSS|偏度和峰度|正态性分布检验|实战小练-SPSS学习(1)

目录 学习目的软件版本基础数据实战数据准备数据初探输出结果分析两个重要统计量&#xff1a;偏度和峰度正态性检验结果其他图件输出 学习目的 检验数据集是否服从正态分布。 软件版本 IBM SPSS Statistics 26。 基础数据 一组数据&#xff0c;如&#xff1a;73 76 78 77 …

ES6 Promise

1.Promise 是异步编程的一种解决方案 const promise new Promise(function(resolve, reject) {if (/* 异步操作成功 */){resolve(value);} else {reject(error);} }) 2.Promise的三种状态 待定&#xff08;pending&#xff09;: 初始状态&#xff0c;既没有被兑现&#xff…

情绪即需求

情绪即需求 心理学认为&#xff0c;每个情绪背后都藏着一个未被满足的心里需求. 模型介绍 每一个情绪背后&#xff0c;都有一个未被满足的心理需求。情绪没有好坏之分&#xff0c;存在即合理。情绪是人类不断进化的产物&#xff0c;每一种情绪都是在保护我们&#xff0c;都有其…

一起学数据结构(9)——二叉树的链式存储及相关功能实现

目录 1. 二叉树的链式存储&#xff1a; 2. 二叉树的前序遍历&#xff1a; 3. 二叉树的中序遍历&#xff1a; 4. 二叉树的后序遍历&#xff1a; 5. 统计二叉树的结点总数 6.统计二叉树的叶子结点数&#xff1a; 7. 统计二叉树第层的结点数量&#xff1a; 8. 二叉树的销毁…

如何修改模型颜色

1、模型材质颜色介绍 在3D模型中&#xff0c;材质&#xff08;Material&#xff09;是指表面质感的特性&#xff0c;包括颜色、光泽、透明度等属性。其中&#xff0c;颜色是最基本的属性之一&#xff0c;它决定了物体表面的外观和感觉。 在现代计算机图形学中&#xff0c;通常…

使用 Typhoeus 和 Ruby 编写的爬虫程序

以下是一个使用 Typhoeus 和 Ruby 编写的爬虫程序&#xff0c;用于爬取 &#xff0c;同时使用了 jshk.com.cn/get_proxy 这段代码获取代理&#xff1a; #!/usr/bin/env rubyrequire typhoeus require jsondef get_proxyurl "https://www.duoip.cn/get_proxy"respon…

CTF是黑客大赛?新手如何入门CTF?

CTF是啥 CTF 是 Capture The Flag 的简称&#xff0c;中文咱们叫夺旗赛&#xff0c;其本意是西方的一种传统运动。在比赛上两军会互相争夺旗帜&#xff0c;当有一方的旗帜已被敌军夺取&#xff0c;就代表了那一方的战败。在信息安全领域的 CTF 是说&#xff0c;通过各种攻击手…

随手记录第十话 -- 升级SpringBoot3.0 + JDK17的踩坑记录

随着有些jar包的升级&#xff0c;JDK1.8已经不是最稳定的版本了。 前段时间接触到Web3相关&#xff0c;jar包的编译最低要JDK13了&#xff0c;碰巧另一个使用Kotlin写的jar包依赖需要17了&#xff0c;那就直接上17吧&#xff0c;同时Springboot也上到3.0。 1. 框架说明 Spri…

哪个牌子的护眼灯防蓝光效果好?2023防蓝光护眼灯推荐

可以肯定的是&#xff0c;护眼灯一般可以达到护眼的效果。 看书和写字时&#xff0c;光线应适度&#xff0c;不宜过强或过暗&#xff0c;护眼灯光线较柔和&#xff0c;通常并不刺眼&#xff0c;眼球容易适应&#xff0c;可以防止光线过强或过暗导致的用眼疲劳。如果平时生活中需…

Python国庆祝福

系列文章 序号文章目录直达链接1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want595.blog.csdn.net/article/details/1295031234漂浮爱心https://want…

软件开发线上维护方案

编写软件维护方案是确保软件系统长期稳定运行和满足不断变化需求的关键步骤。以下是编写软件维护方案的一般步骤和建议&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 文档概述&#xff1a; 开始文档…

Java (day 3)方法、数组、面向对象和异常

Java方法、数组、面向对象和异常 1.方法1.1 什么是方法&#xff1f;1.2 方法的定义1.3 方法的调用1.4 值传递和引用传递1.5 方法的重载1.6 命令行传参1.7 可变参数1.8 递归 2.数组2.1 数组概述2.2 数组声明创建2.3 三种初始化及内存分析和总结&#xff08;1&#xff09;java内存…

前端本地开发中,代理配置是如何解决跨域的?

文章目录 跨域&#xff08;Cross-Origin&#xff09;开发代理原理先说一下三个概念那代理到底是如何解决跨域的&#xff1f; 补充参考视频 跨域&#xff08;Cross-Origin&#xff09; 这里再说一下跨域的概念吧。 在Web开发中&#xff0c;浏览器限制了从一个不同来源&#xff…

【C++】415.字符串相加

题目描述&#xff1a; 给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库&#xff08;比如 BigInteger&#xff09;&#xff0c;也不能直接将输入的字符串转换为整数形式。 示例1&#x…