首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将函数映射到所有参数值上,作为一个列表?但是函数定义中有显式的参数名。

如何将函数映射到所有参数值上,作为一个列表?但是函数定义中有显式的参数名。
EN

Stack Overflow用户
提问于 2018-05-13 19:00:13
回答 2查看 167关注 0票数 0

我希望在函数定义中使用显式参数名ff(a,b,c)来定义一个函数,但我也希望在所有参数上映射一个函数以获得一个列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ff(a,b,c):
    return list(map(myfunc,[a,b,c]))

但是,我不想在函数中显式地将参数名写为a,b,c。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ff(a,b,c):
    return list(map(myfunc,getArgValueList()))

getArgValueList()将按顺序检索参数值,并形成一个列表。怎么做?有像getArgValueList()这样的内置函数吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-13 19:27:03

如果没有丑陋的黑客,你想要做的事情是不可能的。您可以选择*args并获取可以用作args的一系列参数值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def ff(*args):
    return list(map(myfunc, args))

…或者您使用三个显式参数并使用它们的名称:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def ff(a, b, c):
    return list(map(myfunc, (a, b, c)))

…但不是两者兼而有之。

当然,如果您想要的话,您可以自己将这些值放在一个序列中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def ff(a, b, c):
    args = a, b, c
    return list(map(myfunc, args))

…但我不知道这给你买了什么。

如果您真的想知道如何编写getArgValueList函数,我将解释如何编写它。但是,如果您想让代码更易读、更高效、更地道、更容易理解、更简洁,或者几乎任何其他东西,那么它将产生完全相反的效果。我能想象这样做的唯一原因是,如果您必须动态地生成函数或者什么的话--即使这样,我也想不出为什么您不能只使用*args。但是,如果你坚持:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def getArgValueList():
    frame = inspect.currentframe().f_back
    code = frame.f_code
    vars = code.co_varnames[:code.co_argcount]
    return [frame.f_locals[var] for var in vars]

如果您想知道它是如何工作的,那么大部分都在inspect模块文档中:

  • currentframe()获得当前帧-- getArgValueList的帧。
  • f_back获得父帧--调用getArgValueList的人的框架。
  • f_code获取从调用getArgValueList的函数体编译的代码对象。
  • co_varnames是该主体中所有局部变量的列表,从参数开始。
  • co_argcount是显式位置或关键字参数的计数。
  • f_locals是一个具有框架的locals()环境副本的dict。

当然,这只适用于不需要*args、关键字的args或**kwargs的函数,但是您也可以通过一些工作将其扩展到工作。(详细信息请参见co_kwonlyargcountco_flagsCO_VARARGSCO_VARKEYWORDS。)

而且,这只适用于CPython,而不是大多数其他解释器。它可能会在将来的版本中崩溃,因为它非常明显地依赖于解释器的实现细节。

票数 2
EN

Stack Overflow用户

发布于 2018-05-13 19:03:11

construction将将这些参数作为列表提供:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> def f(*args): return list(map(lambda x:x+1, args))
>>> f(1,2,3)
[2, 3, 4]

如果使用f的签名绑定,则必须使用inspect模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import inspect

def f(a, b,c):
    f_locals = locals()
    values = [f_locals[name] for name in inspect.signature(f).parameters]
    return list(map(lambda x:x+1, values))

inspect.signature(f).parameters按正确的顺序给出了参数列表。这些值在locals()中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50322592

复制
相关文章
PHP中的Session工作机制与Session ID的实现原理
客户端第一次访问某服务器,为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。
友儿
2022/09/11
2.2K0
PHP Session
Session 保存在服务端。保存在超全局变量 $_SESSION。 设置 Session 在 PHP 文件最上方开启 Session session_start( [$options]); $_SESSION(['username'])='username'; PHPSESSIONID 保存在服务端文件中,也将 id 保存在 Cookie 中。 通过 Cookie 设置 Session 生存期 session_id( [$id]); session_name( [$name]); setcookie
康怀帅
2018/02/28
1.3K0
Spring Session工作原理
HTTP协议本身是无状态的,为了保存会话信息,浏览器Cookie通过SessionID标识会话请求,服务器以SessionID为key来存储会话信息。在单实例应用中,可以考虑应用进程自身存储,随着应用体量的增长,需要横向扩容,多实例session共享问题随之而来。
杨振涛
2019/07/30
1.2K0
Spring Session工作原理
Spring Session工作原理
HTTP协议本身是无状态的,为了保存会话信息,浏览器Cookie通过SessionID标识会话请求,服务器以SessionID为key来存储会话信息。在单实例应用中,可以考虑应用进程自身存储,随着应用体量的增长,需要横向扩容,多实例session共享问题随之而来。
2020labs小助手
2019/07/30
6240
Spring-Session基于Redis管理Session【面试+工作】
session同样是使用redis来做集中式存储,为了方便测试使用本地的6379端口redis,LettuceConnectionFactory是redis连接工厂类;
Java帮帮
2018/11/08
1.3K0
php session 的使用
学会php session可以在很多地方使用,比如做一个后台登录的功能,要让程序记住用户的session,其实很简单,看了下面的文章你就明白了。
一朵灼灼华
2022/08/05
8070
讲讲session是怎么工作的,session的用法?
马克-to-win:到现在为止,我们学会了一次单独的请求和响应之间传递参数。但是如何跨越几次请求响应之间传递参数呢?比如我以马克的身份登录,这是 一次请求响应。之后买书又是一次请求响应。如何买书的时候还记得买书的人是马克,而不是张三呢?马克这个参数存在哪呢?这是跨越两次访问。Sun公司为我 们提供了HttpSession这个接口。HttpSession session = request.getSession();通过这句话,你可以得到一个与你的浏览器绑定的session对象,存在Tomcat里。这 个session对象只认你这个浏览器,之后只要是你这个浏览器发出的请求,无论跨越多少次请求响应,这个session对象就对它开放,其它浏览器不能 访问。通过session.setAttribute()可以往session里面存值,session.getAttribute可以取值。问题是 session是如何识别你的浏览器呢?初学者可忽略:靠Cookie或者URL改写:如果浏览器支持Cookie,则使用Cookie;如果浏览器不支持Cookie或者Cookie功能被关闭,则自动使用URL改写方法。拿cookie来说(通常客户很少见关闭cookie,即使你关了,我也可以发现,之后提醒你打开或编程序重写URL),服务器往客户端写东西时,cookie会带上sessionid。当客户端再次访问服务器时,同一path下,会自动在html请求头中带上cookie信息,服务器可以在_COOKIE域中得取到想要的sessionid。
马克java社区
2021/07/07
6540
Windows凭据不工作
如果不是敲错IP、用户名、密码,报凭据不工作,一般情况下执行这几句命令后重启远程服务就正常了
Windows技术交流
2021/06/15
6.1K0
PHP设置Redis储存Session
我们在之前的文章已经讲到了session是将数据储存在本地文件中,并且将session_id返回给客户端(浏览器会储存在cookies里)。
仙士可
2019/12/19
2.7K0
PHP设置Redis储存Session
php实现SESSION跨域
稍微大一点的网站,通常都会有不只一个服务器,每个服务器运行着不同的功能模块或者不同的子系统,他们使用不同的二级域名,比如www.a.com、 i.a.com、bbs.a.com。而一个整体性强的网站,用户系统是统一的,即一套用户名、密码在整个网站的各个子系统中都是可以登录使用的。各个服 务器共享用户数据是比较容易实现的,只需要在后端放个数据库服务器,各个服务器通过统一接口对用户数据进行访问即可。但还存在一个问题,就是用户在 i.a.com登录之后,进入www.a.com时,仍然需要重新登录,基本的通行证的问
wangxl
2018/03/08
2.6K0
php – Laravel 7 Session Lifetime
如果它的时间少于Laravel配置,则cookie将被删除,因为本地php.ini优先于Laravel配置.
Lansonli
2021/10/09
1.1K0
PHP session回收机制
由于PHP的工作机制,它并没有一个daemon线程,来定时地扫描session信息并判断其是否失效。当一个有效请求发生时,PHP会根据全局变量 session.gc_probability/session.gc_divisor(同样可以通过php.ini或者ini_set()函数来修改) 的值,来决定是否启动一个GC(Garbage Collector)。默认情况下,session.gc_probability = 1,session.gc_divisor =100,也就是说有1%的可能性会启动GC。
Java架构师必看
2021/03/22
9930
php中session原理详解
SESSION:服务器端的会话技术。为每一个访问者创建唯一的id(UID)(而且同一用户不同的浏览器也会生成不同的UID),并基于这个id(UID)来存储变量; UID存储在cookie中,亦或者通过URL进行传导;
陈大剩博客
2023/03/22
1.5K0
php中session原理详解
php中session原理详解
SESSION:服务器端的会话技术。为每一个访问者创建唯一的id(UID)(而且同一用户不同的浏览器也会生成不同的UID),并基于这个id(UID)来存储变量; UID存储在cookie中,亦或者通过URL进行传导;
高久峰
2023/09/18
2840
php中session原理详解
Redis保存PHP Session方法
Redis保存session用的命令是setex,用redis-cli monitor实时监测可以检测到。
wangxl
2018/07/27
5.6K1
Redis保存PHP Session方法
PHP漏洞之-Session劫持
服务端和客户端之间是通过session(会话)来连接沟通。当客户端的浏览器连接到服务器后,服务器就会建立一个该用户的session。每个用户的session都是独立的,并且由服务器来维护。每个用户的session是由一个独特的字符串来识别,成为session id。用户发出请求时,所发送的http表头内包含session id 的值。服务器使用http表头内的session id来识别时哪个用户提交的请求。
php007
2019/10/29
2K0
PHP漏洞之-Session劫持
Tomcat Session管理分析【面试+工作】
上文中在Tomcat的context.xml中配置了Session管理器RedisSessionManager,实现了通过redis来存储session的功能;Tomcat本身提供了多种Session管理器,如下类图:
Java帮帮
2018/11/22
7140
PHP设置Redis储存Session,自定义session驱动
我们在之前的文章已经讲到了session是将数据储存在本地文件中,并且将session_id返回给客户端(浏览器会储存在cookies里)。
宣言言言
2019/12/18
1.8K0
PHP 7.2警告: “Cannot change session name when session is active”[通俗易懂]
I had a similar problem but finally found a way through. The code below was my first approach that gave me errors.
全栈程序员站长
2022/07/19
1.1K0
PHP 7.2警告: “Cannot change session name when session is active”[通俗易懂]
php案例 session的基本使用
作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主 文章目录 session输出出来 session输出出来 <?php echo "字符串输出";
贵哥的编程之路
2022/09/29
7500
php案例 session的基本使用

相似问题

php $_SESSION不工作

11

PHP不工作($_SESSION)

22

PHP session_name不工作

10

检查PHP ISSET($SESSION -)不工作

33

PHP session_decode不工作吗?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文