defadvice中的?argv是什么

《Jess In Action》58页,这样说?argv:In the body of a defadvice call, the variable ?argv is special: It points to the actual function call being executed。

并给出例子如下:

 1 Jess> (bind ?grocery-list (create$ peas beans butter milk))
 2 (peas beans butter milk)
 3 Jess> (nth$ 1 ?grocery-list)
 4 peas
 5 Jess> (defadvice before nth$
 6 ;; Strip off the function name
 7 (bind ?tail (rest$ ?argv))
 8 ;; Convert zero-based to one-based index
 9 (bind ?index (+ 1 (nth$ 1 ?tail)))
10 ;; Put the argument list back together.
11 (bind ?argv (create$ nth$ ?index (rest$ ?tail))))
12 TRUE
13 Jess> (nth$ 1 ?grocery-list)
14 beans

从11和13行可以看出,(rest$ ?tail)对应?grocery-list,故?tail对应(1 ?grocery-list),所以9行的(nth$ 1 ?tail)就是1,加1以后变成了2。从7行得知,?tail是(rest$ ?argv)得来的,那么?argv就应该是(nth$ 1 grocery-list),这个是调用函数本身。

所以得出结论,文首的话翻译后是:所谓的?argv,是指向实际正执行的函数本身,这个本身是指其表述本身,既不是其执行的结果,也不是其执行的参数,而是组成它的字符串。嗯,应该有个更好的表述,回头想起来了再来修改。

时间: 2024-10-25 14:49:21

defadvice中的?argv是什么的相关文章

python3中sys.argv[]小记

1.python3中sys.argv[]用于传递程序外部的参数,外部一般指命令行输入的参数,argv[]所传递的参数实质上是一个元组,其第一个元素为程序本身. 2. 1 1 sys.argv[0] #传入的参数为程序本身 2 2 sys.argv[n] #n>0,传入外部的第n个参数 3 3 sys.argv[n,m] #传入第n到第m个参数数 原文地址:https://www.cnblogs.com/wasua/p/9087462.html

Python中 sys.argv[]的用法简明解释

因为是看书自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果,也在网上查了许多,但发现这个问题的比较详细的解释只有一个版本,大部分都是转裁和复制的.给的都是简明python教程上那个一长串代码的例子,说看了就明白了,可我看得晕头转向的还是没真正明白,只知道"sys.argv[0]表示代码本身文件路径"这点,其实还是不明其意.后来经过大量努力,多方求教才真正明悟了,谨以记录和分享,希望能从另一个角度给同

python中sys.argv[]的使用

sys.argv[]主要用于程序从外部获取参数.其参数个数可以是多个,组建成一个列表(list). 几个简单示例如下: fun_test.py: 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import sys 5 info = sys.argv[0] 6 print info 我们在命令行中只是运行fun_test.py,发现此时返回函数本身. 注意参数为0! 进行相关修改: info = sys.argv[1] 此时运行fun_

vc++下给main函数中的argv[i]初始化

在VC++中设置工程的调试状态:工程-->设置-->调试-->程序变量: int main(int argc , char* argv[]){ printf("%S\n",argv[i]);//   i变量代表自定义数字. return 0; }

Python中 sys.argv[]的杏彩平台出租用法简明解释

因为是看书杏彩平台出租haozbbs.comQ1446595067 自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果,也在网上查了许多,但发现这个问题的比较详细的解释只有一个版本,大部分都是转裁和复制的.给的都是简明python教程上那个一长串代码的例子,说看了就明白了,可我看得晕头转向的还是没真正明白,只知道"sys.argv[0]表示代码本身文件路径"这点,其实还是不明其意.后来经过大量努力,多

Python中 sys.argv[]的用法实操

使用sys.argv[]首先要调用模块sys import sys 通俗说,这个东西就是取代了input的功能,input是用pycharm上,而argv[]是用在命令行上 也就是window 上的小黑框 按照电脑上的菜单键出现下图,在搜索框输入cmd命令 接下来就看到小黑框了 下面这张图要注意的知识点: 命令行中如果想切换盘符,就是你电脑上的C盘,D盘,E盘,我电脑就这3个分区,我今天要操作的文件路径如下: E:\Python学习\day18\sysargv.py ①打开命令窗口如下,默认路径

PyQt5中sys.argv和sys.exit(app.exec_())

sys.argv就是运行程序时候获取命令行参数 app.exet_()是指程序一直循环运行直到主窗口被关闭终止进程(如果没有这句话,程序运行时会一闪而过) 那为什么要加一个sys.exit()呢? 其实我感觉这个sys.exit()其实没什么作用,他其实就是用来反映程序终止的状态的,在它有父进程的情况下最好有这个sys.exit()通过她的返回值可以判断子进程的状态.而在没有子进程的程序中,其实sys.exit(app.exec_())和app.exec_()效果是一样的. 原文地址:https

Python3 中 sys.argv[ ]的用法解释

sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素.其第一个元素是程序本身,随后才依次是外部给予的参数. 下面我们通过一个极简单的test.py程序的运行结果来说明它的用法. #test.py import sys a=sys.argv[0] print(a) 在程序中找到 ‘运行’->点击->输入"cmd&q

python模块中sys.argv[]使用

「argv」是「argument variable」参数变量的简写形式,一般在命令行调用的时候由系统传递给程序.这个变量其实是一个List列表,argv[0] 一般是“被调用的脚本文件名或全路径”,这个与操作系统有关,argv[1]和以后就是传入的系统命令参数. 其实是一个从程序外部获取参数的入口,这个“外部”很关键,一般我们在命令行中运行.因为我们从外部输入的参数可以是多个,也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素.其第一个元素是程序本身,随后才依次是外部给