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.mzph.cn/pingmian/43158.shtml

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

相关文章

强化学习(Reinforcement Learning,简称RL)

强化学习&#xff08;Reinforcement Learning&#xff0c;简称RL&#xff09;是一种机器学习范式&#xff0c;它允许智能体&#xff08;agent&#xff09;通过与环境互动来学习如何采取行动&#xff0c;以最大化某种累积奖励。在机器人控制中&#xff0c;强化学习可以用来解决各…

第6天: Web架构篇域名语言中间件数据库系统源码获取

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 操作系统层面简述两者区别以及识别的意义操作系统层面漏洞类型对应意义数据库层面第三方层面 操作系统层面 识别操作系统常见办法 通过网站或者通过扫描工具网站对…

强化学习编程实战-2马尔可夫决策过程

2.1 从多臂赌博机到马尔可夫决策过程 如图2-1&#xff0c;图中A为多臂赌博机&#xff0c;B为一堆鸳鸯&#xff0c;其中左上角为雄性鸳鸯&#xff0c;右上角为雌性鸳鸯&#xff0c;B展示的任务是雄性鸳鸯绕过障碍物找到词性鸳鸯。跟多臂赌博机不同的是&#xff0c;雄性鸳鸯经过一…

019-GeoGebra中级篇-GeoGebra的坐标系

GeoGebra作为一款强大的数学软件&#xff0c;支持多种坐标系的使用&#xff0c;包括但不限于&#xff1a;笛卡尔坐标系&#xff08;Cartesian Coordinate System&#xff09;、极坐标系&#xff08;Polar Coordinate System&#xff09;、参数坐标系&#xff08;Parametric Coo…

虚拟机使用

1、安装 如何安装虚拟机&#xff1f;保姆级安装教程&#xff01; - 知乎 (zhihu.com) 2、使用 2.1 快照 作用&#xff1a;保留当前系统信息为快照&#xff0c;随时可以恢复&#xff0c;以防未来系统被你玩坏&#xff0c;就好比游戏中的归档&#xff01;每配置好一个就可以保…

Linux dig命令常见用法

Linux dig命令常见用法 一、dig安装二、dig用法 DIG命令(Domain Information Groper命令)是常用的域名查询工具&#xff0c;通过此命令&#xff0c;你可以实现域名查询和域名问题的定位&#xff0c;对于网络管理员和在域名系统(DNS)领域工作的小伙伴来说&#xff0c;它是一个非…

昇思MindSpore学习笔记6-01LLM原理和实践--FCN图像语义分割

摘要&#xff1a; 记录MindSpore AI框架使用FCN全卷积网络理解图像进行图像语议分割的过程、步骤和方法。包括环境准备、下载数据集、数据集加载和预处理、构建网络、训练准备、模型训练、模型评估、模型推理等。 一、概念 1.语义分割 图像语义分割 semantic segmentation …

【计算机毕业设计】018基于weixin小程序实习记录

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Ubuntu下LXC安装、配置和调优

Yo&#xff0c;各位码农朋友们&#xff01;今天我给大家带来一个火爆的技术博客&#xff0c;我们要在三丰云免费服务器上进行Ubuntu下LXC的安装、配置和调优。别小瞧这个免费云服务器&#xff0c;它可是有点意思的&#xff0c;配置还不错&#xff0c;1核CPU、1G内存、10G硬盘、…

亚马逊云(AWS)云服务器在国内仍有很多人在用?

在中国这个竞争激烈的云服务市场&#xff0c;亚马逊云&#xff08;AWS&#xff09;云服务器不仅站稳了脚跟&#xff0c;而且持续受到众多企业的青睐。究其原因&#xff0c;AWS凭借其无可比拟的全球影响力、技术创新力、以及对中国市场的深度理解&#xff0c;构建了一套难以抗拒…

react重新渲染以及避免不必要的渲染

触发react重新渲染 类组件触发重新渲染 1、setState 2、context 3、props 4、forceUpdate 函数式组件重新渲染 1、useState 2、props 避免不必要的渲染 类组件避免不必要的渲染 1、React.PureComponent/shouldComponentUpdate 函数式组件避免不必要的渲染 1、Reac…

【Java系列】深入解析 Lambda表达式

简化这个代码 这个就是Lambda表达式,可以简化匿名内部类的写法 package lambda;public class demo2 {public static void main(String[] args) {//第二个参数是一个接口,所以我们在调用方法的时候,需要传递这个接口的实现类对象--接口多态// 但是这个实现类,我只要用一次,所以我…

Oracle dblink

在oracle数据库中&#xff0c;有的时候需要跨库访问一些数据&#xff0c;比如我在A表想要访问B表的数据&#xff0c;此时就可以在A表建立B表的dblink实现。 那么&#xff0c;如何搭建dblink呢 CREATE PUBLIC DATABASE LINK db_link_name CONNECT TO B IDENTIFIED BY B USING …

OJ-0708

示例1 1 App1 1 09:00 10:00 09:30 App1示例2 2 App1 1 09:00 11:00 App2 2 09:10 09:30 09:20 App2示例3 2 App1 1 09:00 11:00 App2 2 09:10 09:30 09:50 NA示例4 4 App1 1 09:00 10:00 App2 2 10:10 11:00 App3 4 11:10 12:30 App4 5 10:30 11:30 11:20 App4示例5 4 Ap…

@Builder注解详解:巧妙避开常见的陷阱

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 Builder注解详解&#xff1a;巧妙避开常见的陷阱 前言1. Builder的基本使用使用示例示例类创建对…

极客时间:使用Autogen Builder和本地LLM(Microsoft Phi3模型)在Mac上创建本地AI代理

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

pointpillar 代码报错

错误&#xff1a; Traceback (most recent call last): File "/home/gaoithe/project/python/code/CenterPoint/./tools/dist_test.py", line 415, in <module> main() File "/home/gaoithe/project/python/code/CenterPoint/./tools/dist_test.p…

运维系列.Nginx:自定义错误页面

运维系列 Nginx&#xff1a;自定义错误页面 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…

本地部署秘塔开源搜索引擎

秘塔AI搜索是由秘塔科技于2024年初推出的一款新型搜索引擎&#xff0c;被业界誉为“中国版的Perplexity”。秘塔科技成立于2018年4月&#xff0c;其核心团队包括CEO闵可锐、技术专家唐悦和首席运营官王益为等。秘塔AI搜索以其高效简洁的特点受到关注&#xff0c;其搜索结果直接…

LeetCode——第 405 场周赛

题目 找出加密后的字符串 给你一个字符串 s 和一个整数 k。请你使用以下算法加密字符串&#xff1a; 对于字符串 s 中的每个字符 c&#xff0c;用字符串中 c 后面的第 k 个字符替换 c&#xff08;以循环方式&#xff09;。 返回加密后的字符串。 示例 1&#xff1a; 输入&…