Python集合和函数

深浅拷贝:
.copy()方法,浅拷贝值拷贝一层。
列表中的列表和字典会深拷贝,其他类型会浅拷贝。
列表中的列表和字典会随着副本的修改而改变,其他类型不会随着副本的改变为改变。
a=b不是复制,是两个变量共享同一内存空间,一个改变另一个也改变。
a=[[1,2],3,4] b=copy.copy(a):浅拷贝,c=copy.deepcopy(a):深拷贝

集合:(重点)
作用:把不同的元素集合在一起,去除重复的内容,是无序的,集合里的元素是可哈希的。
set是可变集合,本身是非可哈希的,不能作为字典的键,
frozenset不可变集合。

集合创建:
s=set('alex li')

访问集合:
由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素。
for i in s:
print(i)


集合操作:
s.add('uu'):添加一个元素
s.update('ops'):当成多个元素添加
s.remove():删除元素
s.pop():随机删除
s.clear():清空集合
del s:删除集合

集合操作符:
intersection():交集 {&}
union():并集 {|}
difference():差集 {-}
symmetric_difference()对称差集,反向交集 {^}
a.issuperset(b):a>b 父集
a.issubset(b):a<b 子集

函数:
作用:减少重复代码;方便修改,更易扩展;保持代码一致性

函数创建:define定义
def 函数名称():
函数代码

函数命名规则:
--函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号;
--函数名是区分大小写的。
--函数名不能是保留字。

函数调用一定要加括号。

函数参数:
----必需的参数:

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
def f(name,age):

print('I am %s,I am %d'%(name,age))

f('alex',18)
f('alvin',16)

----关键字参数:

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
def f(name,age):

print('I am %s,I am %d'%(name,age))

# f(16,'alvin') #报错
f(age=16,name='alvin')

----缺省参数(默认参数):默认参数要跟在其他参数后面

调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入:
def print_info(name,age,sex='male'):

print('Name:%s'%name)
print('age:%s'%age)
print('Sex:%s'%sex)
return

print_info('alex',18)
print_info('铁锤',40,'female')

----不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。
加了星号(*)的变量名会存放所有未命名的变量参数。而加(**)的变量名会存放命名的变量参数

不定长参数的位置:
*args无命名参数要放在命名参数的左边;**kargs参数放在右边;默认参数,放最左边

def print_info(*args,**kwargs):
print(args)

#for i in kwargs:
# print('%s:%s'%(i,kwargs[i]))
print(kwargs)
for i in kwargs:
print('%s:%s'%(i,kwargs[i]))

print_info('j','hj',[1,2,3],name='alex',age=12,job='it',hobby='grils')

函数返回值:

return None:默认
return作用:结束函数;返回某个对象
注意:函数没有写return,默认返回None;如果return多个对象,那么会把多个对象封装成一个元祖返回。

=============================================================================
作用域(重要):L(local) E(enclosing) G(global) B(built_in)
局部作用域不能修改全局作用域。
count=10
def outer():
print(count)
count=5
会出错

局部变量要修改全局变量要加关键字global
count=10
def outer():
global count
print(count)
count=5
print(count)

local作用域要想修改enclosing作用域必须加上nonlocal count
def outer():
count=10
def inner():
nonlocal count
count=20
print(count)
inner()
print(count)
outer()

LEGB
x = int(2.9) # int built-in

g_count = 0 # global
def outer():
o_count = 1 # enclosing
def inner():
i_count = 2 # local
print(o_count)
# print(i_count) 找不到
inner()
outer()

# print(o_count) #找不到
小结:
1、变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的作用域>Python内置作用域;
2、只有模块、类及函数才能引入新的作用域;
3、对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;
4、内部作用域要修改外部作用域变量时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字,nonlocal是Python3新增的关键字,有了这个关键字,就能完美的实现闭包了

高阶函数:
函数名可以进行赋值,函数名可以作为参数,还可以函数的返回值
def f(n):
return n*n
print(f(4))

def foo(a,b,func):
return func(a)+func(b)

print(foo(1,2,f))
结果:5
====================
def f():
print('ok')

def bar(a,b,func):
func()
return 1
print(bar(1,2,f))
结果:
ok
1
==================
def foo3():
def inner():
return 8
return inner

foo3()
print(foo3())#返回inner的内存地址
print(foo3()())#返回8

递归函数:
特点:调用自身函数;有一个结束条件
能用递归写的程序循环都可以解决,递归效率在很多时候非常低,不推荐使用

阶乘:
def f(n):
if n==1:
return 1
return n*f(n-1)
print(f(4))

斐波那契数列:

def fibo(n):

before=0
after=1
for i in range(n-1):
ret=before+after
before=after
after=ret

return ret

print(fibo(3))

#**************递归*********************
def fibo_new(n):#n可以为零,数列有[0]

if n <= 1:
return n
return(fibo_new(n-1) + fibo_new(n-2))

print(fibo_new(3))
print(fibo_new(30000))#maximum recursion depth exceeded in comparison

内置函数:

(1)filter:过滤器掉相同的字符
str=['a','b','c','d']
def fun1(s):
if s!='a':
return s
ret=filter(fun1,str)
print(ret) #<filter object at 0x000001A0AF55B940>
print(list(ret)) #['b','c','d']
结果为迭代器(过滤器)对象

(2)map:
str = ['d','a', 'b']
def fun2(s):
return s + "alvin"
ret = map(fun2, str)
print(ret) #<map object at 0x000001D4F52972B0> map object迭代器
print(list(ret)) #['dalvin', 'aalvin', 'balvin']

(3)reduce:叠加
from functools import reduce #Python3使用reduce要加这句话
def add1(x,y):
return x + y
print (reduce(add1, range(1, 10)))## 4950 (注:1+2+...+99)
print (reduce(add1, range(1, 101), 20))

#阶乘
def mul(x,y):
return x*y
print(reduce(mul,range(1,10)))

(4)lambda:
def add(a,b):
return a + b
print add(2,3)

#匿名函数
add = lambda a,b : a + b
print(add(2,3))

 

转载于:https://www.cnblogs.com/cxli99/p/8448535.html

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

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

相关文章

从 WinDbg 角度理解 .NET7 的AOT玩法

一&#xff1a;背景 1.讲故事前几天 B 站上有位朋友让我从高级调试的角度来解读下 .NET7 新出来的 AOT&#xff0c;毕竟这东西是新的&#xff0c;所以这一篇我就简单摸索一下。二&#xff1a;AOT 的几个问题 1. 如何在 .NET7 中开启 AOT 功能在 .NET7 中开启 AOT 非常方便&…

.NET Core C#系列之XiaoFeng.ToCast万能类型转换器

数据类型相互转换如&#xff1a;字符串转整型&#xff0c;字符串转日期首先要引用 XiaoFeng命名空间下边三个扩展方法 就是类型转换的方法最常用的就是 ToCast<T>方法/// <summary> /// 类型相互转换 /// </summary> /// <typeparam name"T">…

利用 Git OpenSSH 查看/生成 本机 ssh 公钥

查看本机公钥 本机公钥文件一般用户目录下的.ssh文件夹&#xff0c;文件夹下有三个文件&#xff0c;分别是 id_rsa 私钥密码id_rsa.pub 公钥内容known_hosts 允许的host地址 使用文本编辑器查看文件id_rsa.pub文件即可 或者使用cat命令查看 # 任意位置打开 Git bash cd ~/.…

高斯消元法

有点线代的知识&#xff1a; const double EPS 1e-8; typedef vector<double> vec; typedef vector<vec> mat; //Ax b vec gauss_jordan(const mat &A, const vec &b) {int n A.size();mat B(n,vec(n1)); //定义大小for(int i0;i < n;i)for(int j0…

判断对象是否存在某个属性

JavaScript判断对象是否存在某个属性或者方法&#xff0c;常用方法有两种hasOwnProperty和in hasOwnProperty是Object原型对象上的一个方法&#xff0c;用来判断对象自身属性中是否具有指定的属性。 这个方法可以用来检测一个对象是否含有特定的自身属性&#xff1b;和 in 运…

【PPT】适配器模式 和 桥接模式

【PPT】适配器模式 和 桥接模式目录【PPT】适配器模式 和 桥接模式一、PPT 截图1.0、封面和目录1.1、设计模式概述1.2、结构型模式特点1.3、适配器模式1.4、桥接模式二、参考资料及 PPT 获取方法独立观察员 2022 年 11 月 15 日为之前公司准备的分享PPT&#xff0c;后来没用上。…

Flask 【第七篇】Flask中的wtforms使用

一、简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件&#xff0c;主要用于对用户请求数据进行验证。 安装&#xff1a; pip3 install wtforms 二、简单使用wtforms组件 1、用户登录 具体代码&#xff1a; from flask import Flask,render_template,request,…

CSS自定义滚动条样式

css通过滚动条伪类来修改滚动条样式&#xff0c;伪类名称如下 ::-webkit-scrollbar 滚动条整体部分 ::-webkit-scrollbar-track 滚动条轨道&#xff08;里面装有滑块 thumb&#xff09; ::-webkit-scrollbar-thumb 滚动条滑块 ::-webkit-scrollbar-button 滚动条轨道两端按钮 …

为了避免内存攻击,美国国家安全局提倡Rust、C#、Go、Java、Ruby 和 Swift,但将 C 和 C++ 置于一边...

本文翻译自两篇文章&#xff0c;第一篇是对美国国家安全局在“软件内存安全”网络安全信息表的解读&#xff0c;第二篇是普及什么是内存安全&#xff0c;为什么它很重要&#xff1f;第一篇 为了避免内存攻击&#xff0c;美国国家安全局提倡Rust、C#、Go、Java、Ruby 和 Swift&a…

自学python(一)

一、入门仪式 学习一门新语言必不可少的一件事&#xff1a; print("Hello world!")二、基础知识 1、注释&#xff1a; 单行注释&#xff1a; 1 print("Hello world!") #输出Hello world! 多行注释&#xff1a; 这是多行注释 这是多行注释 这是多行注释…

.NET周报【11月第2期 2022-11-15】

国内文章统一的开发平台.NET 7正式发布https://www.cnblogs.com/shanyou/archive/2022/11/09/16871945.html在 2020 年规划的.NET 5功能终于在.NET 7 完成了&#xff0c;为微软和社区一起为多年来将不同的开发产品统一起来的努力加冕&#xff0c;未来只有一个.NET, 回顾.NET 20…

如何像使用AspNetCore中的Controllers 和 Actions一样处理MQTT消息

在物联网项目中&#xff0c; 处理MQTT的topic时费工费力&#xff0c; 代码一团乱&#xff0c; 什么才是最好的姿势&#xff1f;这里面我们极力介绍 MQTTnet.AspNetCore.Routing 项目&#xff0c;MQTTnet AspNetCore Routing 是https://github.com/Atlas-LiftTech/MQTTnet.AspN…

chrome 悬停大图插件_Google Chrome浏览器的悬停卡:我不想要的我最喜欢的新东西

chrome 悬停大图插件If you only have a handful of open tabs in Google Chrome, it’s easy to tell what they are. But as you start to collect more tabs (or make the window smaller), it gets harder. That’s where Hover Cards come in. 如果您在Google Chrome浏览器…

GitHub Codespaces 安装 .NET 7

本文主要介绍如何在 GitHub Codespaces 这个云上 IDE 环境中安装 .NET 7背景GitHub 的 Codespaces 可以让我们随时随地编写代码&#xff0c;一些简单的修改也非常方便快捷。特别是 .NET 7 发布后&#xff0c;一些可以直接升级的小项目只需要更改配置就可以了&#xff0c;我们可…

chrome怎么隐藏浏览器_如何使用Google Chrome的隐藏阅读器模式

chrome怎么隐藏浏览器Chrome 75 has a hidden “Reader” mode that strips web pages down to the bare minimum to make them easier to, well, read. But it’s not enabled by default—here’s how to get it now. Chrome 75具有隐藏的“阅读器”模式&#xff0c;可将网页…

angularjs中使用swiper时不起作用,最后出现空白位

controller.js中定义swipers指令&#xff1a; var moduleCtrl angular.module(newscontroller,[infinite-scroll,ngTouch,news.service]) .directive(swipers,swipers); swipers.$inject [$timeout]; function swipers($timeout) {return {restrict: "EA",scope: {…

使用Jupyter记事本记录和制作.NET可视化笔记

前言&#xff1a;对于记录笔记的工具特别多&#xff0c;不过对于程序员来说&#xff0c;记录笔记程序代码运行结果演示可以同时存在&#xff0c;无疑会极大增加我们的笔记的可读性和体验感。以前在写python的时候&#xff0c;使用jupyter的体验很好&#xff0c;所以此处做一个基…

火狐上如何使用谷歌翻译插件_将Google翻译功能添加到Firefox

火狐上如何使用谷歌翻译插件Are you looking for a quick no-fuss way to translate webpages? Then you will want to take a good look at the Translate extension for Firefox. 您是否正在寻找一种快速简便的方法来翻译网页&#xff1f; 然后&#xff0c;您将需要很好地了…

Android 4.X 系统加载 so 失败的原因分析

1 so 加载过程 so 加载的过程可以参考小米的系统工程师的文章loadLibrary动态库加载过程分析 2 问题分析 2.1 问题 年前项目里新加了一个 so库&#xff0c;但发现native 方法的找不到的 crash 好多&#xff0c;好些都是报了java.lang.unsatisfiedlinkerror native method not f…

桌面显示激活windows_愚蠢的怪胎技巧:如何在桌面上显示Windows版本

桌面显示激活windowsHave you ever noticed during all the beta releases of Windows, there’s always a Windows version on the desktop in the lower right-hand corner? Here’s how that “feature” is enabled or disabled. 您是否曾经在Windows的所有beta版本中都注…