
正文
python函数swap Python函数参数
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Python为什么不需要swap
问:Python中为什么没有swap(a, b)方法?我们在Python中如何交换对象?
Python 不使用这种方式(swap(a, b))。Python以引用方式管理对象,你可以交换引用,但通常不能交换内存中的对象值。当然你也不需要这样做。
在C++中这种函数用来交换“a和b的值”。在Python中,a和b的值不会发生交换,但位于当前命名空间中的标记(如a和b)是可以交换的。而对象本身是仍然保留。
所以与其调用一个swap(a, b),你倒不如使用:a,b = b,a。
通常python函数不会混淆它们的命名空间,所以它不能像C++的swap(a, b)那样进行引用操作。
因此,在python中应该这样做:
a = 1
b = 2
def swap(t1, t2):
return t2, t1
a,b = swap(a, b) # After this point, a == 2 and b == 1
But there is not way (other than abusing globals or the module
namespace) to do it like this:
不过下面这段代码不可能像我们希望的那样工作(全局命名空间和局部命名空间是隔离的):
a = 1
b = 2
def swap(t1, t2):
t2, t1 = t1, t2
return
swap(a, b)
# After this point, a == 1 and b == 2. The calling namespace is
# not changed.
在类中,你可以构造一个命名空间来操作可调用的对象(类实例方法),事实上,这意味着也许可以实现一个swap()方法。但是它们仍然只是操作命名空间中的对象引用,而不会交换对象本身(或者它们在机器内存中的数据)。以下只是一个示例,并不表示它们有什么实用性:
class Pair:
def __init__(self, t1, t2):
self.t1 = t1
self.t2 = t2
def get(self):
return self.t1, self.t2
def swap(self):
self.t1, self.t2 = self.t2, self.t1
a = 1
b = 2
pair = Pair(a, b)
pair.get() # returns 1,2
pair.swap() # changes the namespace of the pair object
pair.get() # returns 2,1
a == 1
b == 2 # The a and b labels did NOT change
相关问答
Q1: RC4加解密算法python简单实现
序列密码又称流密码python函数swap,原理是明文流和密钥流按顺序逐位异或运算,从而产出密文流,序列密码属于对合运算。
以下是典型的序列密码RC4的加解密算法实现。其中秘钥流产生算法由RSA和PRGA两个核心子算法组成。
其中引用python函数swap了FrankTools模块中的ItoB, XOR, StoB, BtoS, swap函数,FrankTools模块中将常用函数打包以便调用,展示如下python函数swap:
水平和精力所限,疏漏之处难免,欢迎各位多多不吝赐教python函数swap!
f@tacgib.club
Q2: 如何在PYTHON 中写一个函数交换两个变量的值
python交换两个变量的值很简单,a,b = b,a 就可以,写成函数,代码如下:
def jh(a,b):
return b,a
x = 1
y = 2
x,y = jh(x,y)
print(x,y)
执行结果如下:
Q3: python中argument3是什么意思
python中的命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用argparse这个模块。argparse从python
2.7开始被加入到标准库中,所以如果你的python版本还在2.7以下,那么需要先手动安装。
基本使用
import argparse
parser=argparse.ArgumentParser()
parser.add_argument("echo",help="echo the string")
args=parser.parse_args()
print args.echo
参数介绍
上面这个例子是最简单的一个使用例子,功能是把你的输入参数打印到屏幕 。不过对于基本的使用需求,这几行代码应该就已经够用,更加高级的用法可以参考官方文档。
下面介绍下例子代码。
1、导入argparse模块
2、创建解析器对象ArgumentParser,可以添加参数。
description:描述程序
parser=argparse.ArgumentParser(description="This is a example program ")
add_help:默认是True,可以设置False禁用
3、add_argument()方法,用来指定程序需要接受的命令参数
定位参数:
parser.add_argument("echo",help="echo the string")
可选参数:
parser.add_argument("--verbosity", help="increase output verbosity")
在执行程序的时候,定位参数必选,可选参数可选。
add_argument()常用的参数:
dest:如果提供dest,例如dest="a",那么可以通过args.a访问该参数
default:设置参数的默认值
action:参数出发的动作
store:保存参数,默认
store_const:保存一个被定义为参数规格一部分的值(常量),而不是一个来自参数解析而来的值。
store_ture/store_false:保存相应的布尔值
append:将值保存在一个列表中。
append_const:将一个定义在参数规格中的值(常量)保存在一个列表中。
count:参数出现的次数
parser.add_argument("-v", "--verbosity", action="count", default=0, help="increase output verbosity")
version:打印程序版本信息
type:把从命令行输入的结果转成设置的类型
choice:允许的参数值
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], help="increase output verbosity")
help:参数命令的介绍
上代码:
我们从一个基本的程序开始(它什么也不做)
importargparse
parser =argparse.ArgumentParser()
parser.parse_args()
运行结果:
$ python prog.py
$ python prog.py --help
usage: prog.py [-h]
optional arguments:
-h, --help show this help message and exit
$ python prog.py --verbose
usage: prog.py [-h]
prog.py: error: unrecognized arguments: --verbose
$ python prog.py foo
usage: prog.py [-h]
prog.py: error: unrecognized arguments: foo
结果分析:
若不给参数而运行这个程序,将不会得到任何结果。
第二条命名显示了使用的argparse的好处,你什么也没做,却得到了一个很好的帮助信息。
我们无需人为设置--help参数,就能得到一个良好的帮助信息。但是若给其他参数(比如foo)就会产生一个错误。
位置参数
首先,给一个例子:
importargparse
parser =argparse.ArgumentParser()
parser.add_argument("echo")
args =parser.parse_args()
print args.echo
运行结果:
$ python prog.py
usage: prog.py [-h] echoprog.py: error: the following arguments are required: echo
$ python prog.py --help
usage: prog.py [-h] echopositional arguments:
echooptional arguments:
-h, --help show this help message and exit
$ python prog.py foo
foo
结果分析:
这次,我们增加了一个add_argument()方法,用来设置程序可接受的命令行参数。
现在要运行程序,就必须设置一个参数。
parse_args()方法实际上从我们的命令行参数中返回了一些数据,在上面的例子中是echo
这个像“魔法”一样的过程,是argparse自动完成的。
尽管自动产生的帮助信息展示地很美观,但是我们仍然无法只根据echo这个参数知道它是做什么的。所以,我们增加了一些东西,使得它变得更有用。
importargparse
parser =argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
args =parser.parse_args()
print args.echo
运行结果:
$ python prog.py -h
usage: prog.py [-h] echopositional arguments:
echo echo the string you usehere
optional arguments:
-h, --help show this help message and exit
在此基础上,我们再多改变一点:(计算输入参数square的平方)
importargparse
parser =argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number")
args =parser.parse_args()
print args.square**2
下面是运行结果:
$ python prog.py 4Traceback (most recent call last):
File "prog.py", line 5, in print args.square**2TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
这个程序并不能正确运行,因为argparse会将输入当作字符串处理,所以我们需要设置它的类型:(type=int)
importargparse
parser =argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",
type=int)
args =parser.parse_args()
print args.square**2
下面是运行结果:
$ python prog.py 4
16
$ python prog.py four
usage: prog.py [-h] square
prog.py: error: argument square: invalid int value: 'four'
现在,这个程序能够顺利运行,而且能够处理一些错误输入
Q4: 用python编程,求代码
# 时间转换的函数
def timeTrans(t):
if t 60:
h = t / 60
m = t % 60
tt = '%d:%d' % (h, m)
return '%d:%d' % (h, m)
else:
return '0:%d' % t
# 汇率转换的函数
def swap(money):
omoney = money * 0.7899
return omoney
# 时间转换函数调用测试
# 传入76分钟
mytime = timeTrans(76)
# 输出1:16
print mytime
# 汇率转换函数测试
# 传入10块钱
t = swap(10)
# 输出7.899
print t
Q5: 怎样让Python脚本与C++程序互相调用
二、Python调用C/C++\x0d\x0a\x0d\x0a\x0d\x0a1、Python调用C动态链接库\x0d\x0a\x0d\x0a Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可。\x0d\x0a(1)C语言文件:pycall.c\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0a/***gcc -o libpycall.so -shared -fPIC pycall.c*/ \x0d\x0a#include \x0d\x0a#include \x0d\x0aint foo(int a, int b) \x0d\x0a{ \x0d\x0a printf("you input %d and %d\n", a, b); \x0d\x0a return a+b; \x0d\x0a} \x0d\x0a(2)gcc编译生成动态库libpycall.so:gcc -o libpycall.so -shared -fPIC pycall.c。使用g++编译生成C动态库的代码中的函数或者方法时,需要使用extern "C"来进行编译。\x0d\x0a(3)Python调用动态库的文件:pycall.py\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0aimport ctypes \x0d\x0all = ctypes.cdll.LoadLibrary \x0d\x0alib = ll("./libpycall.so") \x0d\x0alib.foo(1, 3) \x0d\x0aprint '***finish***' \x0d\x0a(4)运行结果:\x0d\x0a\x0d\x0a\x0d\x0a2、Python调用C++(类)动态链接库 \x0d\x0a\x0d\x0a 需要extern "C"来辅助,也就是说还是只能调用C函数,不能直接调用方法,但是能解析C++方法。不是用extern "C",构建后的动态链接库没有这些函数的符号表。\x0d\x0a(1)C++类文件:pycallclass.cpp\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0a#include \x0d\x0ausing namespace std; \x0d\x0a \x0d\x0aclass TestLib \x0d\x0a{ \x0d\x0a public: \x0d\x0a void display(); \x0d\x0a void display(int a); \x0d\x0a}; \x0d\x0avoid TestLib::display() { \x0d\x0a cout \x0d\x0ausing namespace std; \x0d\x0aint test() \x0d\x0a{ \x0d\x0a int a = 10, b = 5; \x0d\x0a return a+b; \x0d\x0a} \x0d\x0aint main() \x0d\x0a{ \x0d\x0a cout \x0d\x0a#include \x0d\x0a#include \x0d\x0a \x0d\x0aint fac(int n) \x0d\x0a{ \x0d\x0a if (n
回答于 2022-11-16
python函数swap的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Python函数参数、python函数swap的信息别忘了在本站进行查找喔。







