python - 函数 / 字典 / 集合

一.函数

形参和实参:

>>> def MyFirstFunction(name):
'函数定义过程中的name是叫形参'
...     print('传递进来的' + name + '叫做实参,因为Ta是具体的参数值!')
print前面要加缩进tab,否则会出错。
>>> MyFirstFunction('小红')
小红
传进来的小红是实参

关键字参数:

关键字参数,用在调用函数的实参的位置,其目的就是给形参下一个定义,这样的话,python会按照关键字去索引,而不是用顺序去索引。

>>> def SaySome(name,words):
...     print(name + '->' + words)
>>> SaySome('小红','小蓝')
小红->小蓝
>>> SaySome(words = '小红',name = '小蓝')
小蓝->小红

默认参数

默认参数(即形参中给定默认值,则在未给实参时会以默认值输出)

>>> def SaySome(name = 'Hadley',words = 'Great'):
...     print(name + 'is' + words)
...
>>> SaySome()
HadleyisGreat
>>> SaySome('abc','def')
abcisdef

收集参数(可变参数)

>>> def test(*params):
...     print('参数的长度是:',len(params))
...     print('第二个参数是:',params[1])
...
>>> test(1,'abc',2,3,4,5)
参数的长度是: 6
第二个参数是: abc

函数与过程

再谈谈返回值

如果有返回值,函数则返回对应值;如果没有,则返回None。

>>> def back():
...     return [1,'Hadley',0.66]
...
>>> back()
[1, 'Hadley', 0.66]
>>> def back():
...     return (1,'Hadley',0.66)
...
>>> back()
(1, 'Hadley', 0.66)
>>> c = back()
>>> c[0]
1
>>> c[1]
'Hadley'
>>> c[2]
0.66

局部变量与全局变量

局部变量:在局部生效如在函数中定义的变量

全局变量:作用于整个模块。函数内若试图修改全局变量,Python会新建一个同名局部变量用于存储修改值,原全局变量的值不变。不要在函数内部去修改全局变量。

>>> def discounts(price, rate):
...     final_price = price * rate
...     old_price = 88 #这里试图修改全局变量
...     print('修改后old_price的值是:', old_price)
...     return final_price
...
>>> old_price = float(input('请输入原价:'))
请输入原价:100
>>> rate = float(input('请输入折扣率:'))
请输入折扣率:0.8
>>> new_price = discounts(old_price, rate)
修改后old_price的值是: 88
>>> print('修改后old_price的值是:', old_price)
修改后old_price的值是: 100.0
>>> print('打折后价格是:', new_price)
打折后价格是: 80.0

global可将局部变量声明为全局变量

>>> count = 5
>>> def Myfun():
...     count = 10
...     print(count)
...
>>> Myfun()
10
>>> print(count)
5
>>> def Myfun():
...     global count
...     count = 10
...     print(count)
...
>>> Myfun()
10
>>> print(count)
10

内嵌函数和闭包

内嵌函数:

>>> def fun1():
...     print('fun1正在被调用')
...     def fun2():
...             print('fun2正在被调用')
...     fun1()
...
>>> fun1()
fun1正在被调用
fun1正在被调用
fun1正在被调用
fun1正在被调用
fun1正在被调用
....
>>> def fun1():
...     print('fun1正在被调用')
...     def fun2():
...             print('fun2正在被调用')
...     fun2()
...
>>> fun1()
fun1正在被调用
fun2正在被调用

闭包(closure)

>>> def funX(x):
...     def funY(y):
...             return x*y
...     return funY
...
>>> i = funX(5)
>>> i(8)
40
>>> funX(5)(8)
40
>>> def fun1():
...     x = 5
...     def fun2():
...             nonlocal x
...             x*=x
...             return x
...     return fun2()
...
>>> fun1()
25

lambda表达式

lambda表达式用法。lambda表达式是匿名函数,没有名字def

lambda x : 2 * x +1

x是参数,2* x +1是表达式

返回值是函数对象

>>> def ds(x):
...     return 2*x+1
...
>>> ds(5)
11
>>>
>>> lambda x : 2*x + 1
<function <lambda> at 0x0000022A95C23060>
>>> g = lambda x: 2*x + 1
>>> g(5)
11
>>> def add(x,y):
...     return x+y
...
>>> add(3,4)
7
>>> lambda x,y:x+y
<function <lambda> at 0x0000022A95C23100>
>>> g = lambda x,y:x+y
>>> g(3,4)
7

递归

递归必须满足哪两个基本条件

(1)函数调用自己;

(2)函数设置了正确的返回值。

eg:•写一个求阶乘的函数

正整数阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。

例如所给的数是5,则阶乘式是1×2×3×4×5,得到的积是120,所以120就是4的阶乘。

假设我们n的值传入是5,那么:

>>> def factorial(n):
...     if n==1:
...             return 1
...     else:
...             return n*factorial(n-1)
...
>>> nember = int(input('请输入一个正整数:'))
请输入一个正整数:5
>>> result = factorial(nember)
>>> print(result)
120

二.字典

fromkey()方法用于创建并返回一个新的字典。它有两个参数,第一个参数是字典的键;第二个参数是可选的,是传入键的值。如果不提供,默认是None

>>> dict1 = {}
>>> dict1.fromkeys((1,2,3))
{1: None, 2: None, 3: None}
>>> dict2 = {}
>>> dict2.fromkeys((1,2,3),"Number")
{1: 'Number', 2: 'Number', 3: 'Number'}
>>> dict3 = {}
>>> dict3.fromkeys((1,2,3),('one','two','three'))
{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}

访问字典的方法有key()、values()和items()

key()用于返回字典中的键,value()用于返回字典中所有的值,item()当然就是返回字典中所有的键值对(也就是项)

>>> dict1 = dict1.fromkeys(range(5),'好')
>>> dict1.keys()
dict_keys([0, 1, 2, 3, 4])
>>> dict1.values()
dict_values(['好', '好', '好', '好', '好'])
>>> dict1.items()
dict_items([(0, '好'), (1, '好'), (2, '好'), (3, '好'), (4, '好')])

 get()方法提供了更宽松的方式去访问字典项,当键不存在的时候,get()方法并不会报错,只是默默第返回一个None,表示啥都没找到:

>>> dict1.get(10)
>>> dict1.get(4)
'好'

如果希望找不到数据时返回指定的值,可以在第二个参数设置对应的默认返回值:

>>> dict1.get(32,'木有')
'木有'

 如果不知道一个键是否在字典中,可以使用成员资格操作符(in 或 not in)来判断

>>> 31 in dict1
False
>>> 4 in dict1
True

clear()可清空一个字典

>>> dict1
{0: '好', 1: '好', 2: '好', 3: '好', 4: '好'}
>>> dict1.clear()
>>> dict1
{}

 copy()方法是复制字典(全拷贝)

>>> a = {1:'one',2:'two',3:'three'}
>>> b = a.copy()
>>> id(a)
2460458286784
>>> id(b)
2460455583296
>>> a[1] = 'four'
>>> a
{1: 'four', 2: 'two', 3: 'three'}
>>> b
{1: 'one', 2: 'two', 3: 'three'}

pop()是给定键弹出对应的值,popitem()是随机弹出一个项

>>> a
{1: 'four', 2: 'two', 3: 'three'}
>>> a.pop(1)
'four'
>>> a.popitem()
(3, 'three')
>>> a.popitem()
(2, 'two')

setdefault()方法与get()方法相似,但setdefault()在字典中找不到相应的键值时会自动添加

>>> a = {1:'one',2:'two',3:'three'}
>>> a.setdefault(2)
'two'
>>> a.setdefault(3)
'three'

update()方法可以更新字典

>>> a = {1:'one','小白':None}
>>> b = {'小白':'狗'}
>>> a.update(b)
>>> a
{1: 'one', '小白': '狗'}

三.集合

字典的表亲--集合(在python3中,如果用大括号括起一堆数字但没有体现映射关系,那么就会认为这堆玩意儿就是个集合)

>>> num1 = {}
>>> type(num1)
<class 'dict'>
>>> num2 = {1,2,3}
>>> type(num2)
<class 'set'>

集合中的元素都是唯一的(集合会自动帮我们把重复的数据清理掉,集合是无序的,所以不能试图去索引集合中的某一个元素)

>>> num = {1,2,3,3,4,5}
>>> num
{1, 2, 3, 4, 5}

如何创建一个集合有两种方法:1、直接把一堆元素用大括号括起来;2、用set()

1、直接把一堆元素用大括号括起来

>>> set1 = {'小红','小蓝','小绿'}

2、用set()

>>> set1 = {'小红','小蓝','小绿'}
>>> set2 = set(['小红','小蓝','小绿'])
>>> set1 == set2
True

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue框架引入

vue简介 1.1.vue是什么?Vue官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/ vue是一套构建用户界面的渐进式javascript框架 构建用户界面:将我们手里拿到的数据通过某种办法变成用户可以看见的界面前端工程师的职责:就是在合适的时候发出合适的请求,然后…

Docker-11☆ Docker Compose部署RuoYi-Cloud

一、环境准备 1.安装Docker 附:Docker-02-01☆ Docker在线下载安装与配置(linux) 2.安装Docker Compose 附:Docker-10☆ Docker Compose 二、源码下载 若依官网:RuoYi 若依官方网站 鼠标放到"源码地址"上,点击"RuoYi-Cloud 微服务版"。 跳转至G…

微信如何快速回复信息呢?

时业务繁忙的时候可能会出现一大堆消息需要去回复&#xff0c;很多客户也会来问重复的问题&#xff0c;有时候回复消息也需要一个及时性&#xff0c;如果回复慢了有可能客户就跑了&#xff0c;那这个时候就会体现出自动回复的优势。 只要设置好一个关键词&#xff0c;只要对方…

基于React 实现井字棋

一、简介 这篇文章会基于React 实现井字棋小游戏功能。 二、效果演示 三、技术实现 import {useEffect, useState} from "react";export default (props) > {return <Board/> }const Board () > {let initialState [[, , ], [, , ], [, , ]];const [s…

【CW32F030CxTx StartKit开发板】利用超声波传感器实现智能灯控

目录 1、超声波传感器 2、硬件连线 3. 程序开发 3.1 超声波测距 3.2 LED控制 4. 演示视频 本文首发于21ic。 感谢21ic和武汉芯源提供的测试机会。 在上一篇帖子中介绍了CW32F030CxTxStartKit 评估板的环境构建。本次介绍如何利用超声波传感器实现人来灯亮&#xff0c;人…

Milvus lite start 及存储策略

背景 今天开始写下Milvus&#xff0c;为了方便&#xff0c;我直接使用的是 milvus-lite 版本&#xff0c;default 情况下&#xff0c;你可能不知道他到底将 db 存储到什么位置了。启动 default-server&#xff0c;看下Milvus 的start及存储逻辑 主逻辑 def start(self):sel…

合并pdf的方法,如何合并pdf文件到一个pdf,简单方法

在现代办公和学习中&#xff0c;pdf格式的文件因其跨平台兼容性和安全性得到了广泛应用。然而&#xff0c;有时我们需要将多个pdf文件合并成一个&#xff0c;以便于管理和分享。本文将详细介绍几种合并pdf的方法&#xff0c;帮助读者轻松完成pdf文件的合并工作。 方法一、使用p…

【NLP学习路线的总结】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 目录 0. 👉前言1. 👉前置知识👉基础数学知识👉编程语言👉…

matlab:对带参数a关于x的方程求解

题目 讲解 简洁对各个式子的内部含义用浅显易懂的话语总结出来了&#xff0c;耐心体会 f(a) (x)exp(x)x^ax^(sqrt(x))-100;%因为下面的fzero的第一个数需要一个fun&#xff0c;所以这里有两个句柄&#xff0c;第一个a是输入的&#xff0c;第二个x是需要被解出的 A0:0.1:2;%创…

12种增强Python代码的函数式编程技术

前言 什么是函数式编程&#xff1f; 一句话总结&#xff1a;函数式编程(functional programming)是一种编程范式&#xff0c;之外还有面向对象&#xff08;OOP&#xff09;、面向过程、逻辑式编程等。 函数式编程是一种高度抽象的编程范式&#xff0c;它倡导使用纯函数&#x…

VTD的RDB介绍,从入门到放弃

文章目录 前言一、二、常见的RDB数据类型1、RDB_OBJECT_STATE_BASE_t2、RDB_OBJECT_STATE_EXT_t3、RDB_OBJECT_STATE_t4、RDB_SENSOR_OBJECT_t5、RDB_COORD_t6 RDB_GEOMETRY_t7、RDB_MSG_ENTRY_HDR_t 三、疑惑的问题点&#xff1a;1、在RDB_OBJECT_STATE_EXT_t中这两个的区别是…

前端面试题26(vue3中响应式实现原理)

Vue 3 中响应式系统的实现主要依赖于 ES6 的 Proxy 对象&#xff0c;这与 Vue 2 中使用 Object.defineProperty 的方式有着本质的区别。Proxy 提供了一种更为强大且灵活的方法来拦截和定制对象的操作&#xff0c;例如获取、设置属性值等。下面是对 Vue 3 响应式系统实现方式的详…

5款好用公司监控软件分享|管理者必看

当今社会&#xff0c;企业数据安全和员工工作效率成为了管理者不可忽视的重要议题。 选择合适的公司监控软件&#xff0c;不仅有助于提升管理效率&#xff0c;还能有效保障企业信息安全。 下面小编将为您分享五款备受好评的公司监控软件&#xff0c;助力管理者更好地管理企业…

faskapi好用的模板

在Web开发领域&#xff0c;FastAPI作为一个基于Python的高性能Web框架&#xff0c;因其快速、易用以及强大的功能而备受开发者青睐。关于FastAPI的好用模板&#xff0c;这里介绍几个不同角度的模板或项目框架&#xff0c;以帮助您更好地理解和选择适合自己的起点。 1. FastAPI…

《基于 Kafka + Flink + ES 实现危急值处理措施推荐和范围校准》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; 近期刚转战 CSDN&#xff0c;会严格把控文章质量&#xff0c;绝不滥竽充数&#xff0c;欢迎多多交流。&am…

.locked勒索病毒解析与防护指南

引言 随着信息技术的飞速发展&#xff0c;网络安全问题日益严峻&#xff0c;其中勒索病毒成为威胁企业和个人数据安全的重要隐患之一。在众多勒索病毒家族中&#xff0c;.locked勒索病毒以其独特的加密方式和广泛的传播途径&#xff0c;引起了广泛的关注。本文将从多个方面详细…

张量分解(1)——初探张量

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…

解决线程不安全问题的几种方式

线程不安全问题 日常生活中我们会经常碰到在不同的平台上买各种票的问题&#xff0c;例如在App、线下售票窗口等购买火车票、电影票。这里面就存在着线程安全的问题&#xff0c;因为当多个线程访问同一个资源时&#xff0c;会导致数据出错&#xff0c;例如甲和乙两人同时看中了…

2024最新版若依-RuoYi-Vue3-PostgreSQL前后端分离项目部署手册教程

项目简介: RuoYi-Vue3-PostgreSQL 是一个基于 RuoYi-Vue3 框架并集成 PostgreSQL 数据库的项目。该项目提供了一套高效的前后端分离的开发解决方案&#xff0c;适用于中小型企业快速构建现代化的企业级应用。此项目结合了 RuoYi-Vue-Postgresql 和 RuoYi-Vue3 的优点&#xff0…

libaom 编码器实验 AV1 标准 SVC 分层编码

SVC编码 视频SVC编码&#xff0c;即Scalable Video Coding&#xff08;可适性视讯编码或可分级视频编码&#xff09;&#xff0c;是H.264/MPEG-4 AVC编码的一种扩展&#xff0c;它提供了更大的编码弹性&#xff0c;并且具有时间可适性&#xff08;Temporal Scalability&#x…