我想知道是否有一种方法可以将命名参数转换为dict.
我知道使用**kwargs代替单个命名参数将非常简单。
def func(arg1=None, arg2=None, arg3=None):
# How can I convert these arguments to {'arg1': None, 'arg2': None, 'arg3': None}`
Run Code Online (Sandbox Code Playgroud) 所以我正在开发一个小项目,我正在使用 websocket 客户端库,为了创建一个WebSocketApp处理 websocket 连接的对象,您可以使用类似的方法实例化该对象
ws = websocket.WebSocketApp(uri, on_open=on_open, on_message=on_message, on_ping=on_ping)
Run Code Online (Sandbox Code Playgroud)
现在我有一个名为on_message回调函数(对象?)的函数,它处理传入的消息,或者更确切地说如何处理它们,并且ws当完整消息传入时(显然)由我创建的对象调用。 on_message被定义为实例化对象时的回调WebSocketApp。
on_message 是这样的
def on_message(ws, message):
print(message)
Run Code Online (Sandbox Code Playgroud)
我想要的是这样的:
def on_message(ws, message, someList)
somelist.append(message)
Run Code Online (Sandbox Code Playgroud)
我当然可以使用全局变量来引用我想要更新的对象(在本例中是一个列表),但这似乎不是正确的方法,如果我可以传递对该对象的引用,那就太好了我想在初始化WebSocketApp对象时进行更新,例如:
ws = websock.WebSocketApp(uri, on_message=on_message(ref_to_Obj), on_open=on_open, on_close=on_close)
Run Code Online (Sandbox Code Playgroud)
但显然这不起作用,因为我收到TypeError: on_message() missing 2 required positional arguments: 'message' and objRef'错误。
我不完全确定如何解决这个问题。我想到了子类化,但也不确定如何实现它。查看源代码,WebSocketApp它说它有 2 个参数,1)WebSocketApp类本身和 2)从服务器接收的 utf-8 数据。我从来没有传递这些,并且我假设库在创建它们时只是将这些引用传递出去,但是我如何重载它以包含其他参数?首先想到的是使用 *args 或 **kwargs 进行重载,但又不确定如何实现它。我之前问过,建议使用 lambda 函数,但我也不知道如何让它工作。
arguments overloading parameter-passing keyword-argument python-3.x
我可以以某种方式简化这个 switch 语句,因为这两种情况都只使用另一个函数参数做同样的事情吗?
\nswitch (data.Subscriber.Protocol)\n{\n case "email json":\n builder.Attachments.Add("O\xc4\x8ditanje.json", CraftAttachment(data));\n break;\n case "email text":\n builder.Attachments.Add("O\xc4\x8ditanje.txt", CraftAttachment(data));\n break;\n default:\n break;\n}\nRun Code Online (Sandbox Code Playgroud)\n 我有一个方法,当作为参数传递时,对4种不同类的类执行相同的任务.目前,我必须为所有4个类编写该方法4次.例:
doSomethingForClass1(MyClass1 myclass1, Address address);
doSomethingForClass2(MyClass2 myclass2, Address address);
doSomethingForClass3(MyClass3 myclass3, Address address);
doSomethingForClass4(MyClass4 myclass4, Address address);
Run Code Online (Sandbox Code Playgroud)
所有这些方法都做同样的事情并返回相同的对象.如何将其合并为一个方法并传递不同的对象?
我没有使用VB,C#或ASP,据说我想直接将参数传递给Crystal Reports XI R2.例如:
click 'Start'
type 'Run' then Enter
'MyReport.rpt 12345'
Run Code Online (Sandbox Code Playgroud)
(12345)是我要传入的参数,或者我可以输入
'MyReport.rpt?parameter1=12345'
Run Code Online (Sandbox Code Playgroud)
我在研究过程中发现的大多数例子都是讨论VB或ASP,这不是我想要的.
提前致谢!
首先我知道这一定很简单,我一直在尝试在Stackoverflow.com和Google上阅读类似的问题,但我仍然无法让我的程序运行.
我很快写了一篇关于我的程序试图做的摘要:
public class One{
public One(){
Two t = new Two(this);
}
public void doSomething(){
sout("HERE");
}
public static void main(String[] args){
One o = new One()
Two t = new Two(o);
}
}
public class Two{
public Two(One o){
One o = o;
o.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,我从方法调用o.doSomething()得到一个NullPointerException.我已经尝试了一段时间来解决它,但我很难过.如果有人能够快速告诉我修复它会非常感激.
什么更有效:通过指针或值调用?我认为它是由指针调用,因为传递指向变量的指针不会使用与创建变量副本一样多的内存.我错了吗?
main(){
int a, b;
a = 10;
b = 5;
gcf(&a, &b);
return 0;
}
int gcf(int* c, int* d){
int val1=*c;
int val2=*d;
//...
}
Run Code Online (Sandbox Code Playgroud) 我无法使函数mostrarmatriz()工作.该程序从头到尾编译和运行没有错误,但函数mostrarmatriz()没有显示任何东西.当我将该功能复制到主功能时,它可以完美地工作.看来我通过引用传递值时遇到了问题.请帮忙,我被困住了.
Main.c文件:
#include "InvMatriz.h"
#include <stdio.h>
int main(int argc, char **argv)
{
float **A;
int n;
printf("Ingrese el tamaño de la matriz: ");
scanf("%d", &n);
A = ingresematriz(n);
void mostrarmatriz(A, n);
printf("adfasd");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
头文件InvMatriz.h
#ifndef INVMATRIZ_H_
#define INVMATRIZ_H_
float** ingresematriz(int );
void mostrarmatriz(float**X ,int x);
#endif // INVMATRIZ_H
Run Code Online (Sandbox Code Playgroud)
Ingrese Matriz.c文件
#include "InvMatriz.h"
#include <stdio.h>
float **ingresematriz(int n)
{
int i, j;
//Asigna espacio en la memoria
float **A;
A = malloc(n * sizeof (float *));
for (i = …Run Code Online (Sandbox Code Playgroud) 我是新手.所以请耐心等待,
#include<stdio.h>
int abc(int k)
{
k++;
}
int main()
{
int a=1;
printf("%d",abc(a));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以上程序的输出是:1
我的问题是输出不应该是'2',因为实际参数将'1'的值传递给形参,并且必须通过函数abc递增.
当我将函数调用更改为
printf("%d",abc(1));
Run Code Online (Sandbox Code Playgroud)
输出是一些垃圾值.
参数传递如何在这里工作?请解释.
我希望类的构造函数能够传递两种类型的参数,然后在方法内部根据参数的类型做一些事情.类型将是double和String[].类及其构造函数类似于:
public class MyClass
{
public MyClass (Type par /* the syntax here is my issue */ )
{
if (Type.GetType(par) == String[])
{
/// Do the stuff
}
if (Type.GetType(par) == double)
{
/// Do another stuff
}
}
Run Code Online (Sandbox Code Playgroud)
并且这个类将以这种方式在另一个类上实例化:
double d;
String[] a;
new MyClass(d); /// or new MyClass(a);
Run Code Online (Sandbox Code Playgroud) c ×2
c# ×2
function ×2
java ×2
.net-6.0 ×1
arguments ×1
c#-10.0 ×1
c++ ×1
class ×1
constructor ×1
dictionary ×1
file ×1
named ×1
overloading ×1
overriding ×1
parameters ×1
python ×1
python-3.x ×1
reference ×1
this ×1
types ×1