我有一个python 3函数,定义如下:
def hidden_markov_model(distribution, K=3, N=100, *args):
Run Code Online (Sandbox Code Playgroud)
当我调用该函数时,我收到此错误:
Q_hmm = hidden_markov_model(Gaussian, K=K, N=N,
mu, K*[std**(-2)*np.identity(2)],
)
SyntaxError: positional argument follows keyword argument
Run Code Online (Sandbox Code Playgroud)
怎么了?
这是代码:
my @s=<a b c d>;
for @s.kv {
for ($^k ... @s.elems) {
printf("%s ", $^v);
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
预期输出为:
# a b c d
# b c d
# c d
# d
Run Code Online (Sandbox Code Playgroud)
但它给出了这个错误(可能等等)
key 0, val 1 Too few positionals passed; expected 2 arguments but got 1
Run Code Online (Sandbox Code Playgroud)
它看起来像主循环的位置的变量$^k,并$^v不能在内环内使用。如何解决?谢谢。更新:修复了内循环内的错字
我试图通过PowerShell安装/更新EPO代理,但出现错误。我是PowerShell的新手,所以我看不到是什么原因造成的。
以下是我用于更新代理的脚本:
Start-Process -FilePath $scriptpath "\INAEPO01_Framepkg.exe" "/FORCEINSTALL" "/INSTALL=AGENT" -Wait
Run Code Online (Sandbox Code Playgroud)
错误:
找不到接受参数/ FORCEINSTALL的位置参数。
从这个链接,它说:
# You can define functions with optional positional arguments
function defaults(a,b,x=5,y=6)
return "$a $b and $x $y"
end
defaults('h','g') # => "h g and 5 6"
defaults('h','g','j') # => "h g and j 6"
defaults('h','g','j','k') # => "h g and j k"
try
defaults('h') # => ERROR: no method defaults(Char,)
defaults() # => ERROR: no methods defaults()
catch e
println(e)
end
Run Code Online (Sandbox Code Playgroud)
我认为这个例子的目的是表明,如果提供的参数小于默认参数,该函数也将返回默认参数.
但是,当提供一个或没有参数时,为什么会出现错误?即我怎么知道提供两个参数是可以的,但提供一个或没有是不可以的?
当尝试使用新的(和令人敬畏的)python 3 文字字符串插值的一些功能时,我发现了这种奇怪的区别.
例如,使用旧的str.format,我可以格式化具有动态数字位数的整数,如下所示:
>>> d = 5
>>> N = 3
>>> '{:0{N}d}'.format(d, N=N)
'005'
Run Code Online (Sandbox Code Playgroud)
但是当我使用文字字符串尝试等效时,我收到一个错误:
>>> f'{:0{N}d}'
SyntaxError: f-string: empty expression not allowed
Run Code Online (Sandbox Code Playgroud)
只有通过交换参数的顺序,才能获得正确的格式
>>> f'{d:0{N}}'
'005'
Run Code Online (Sandbox Code Playgroud)
这让我觉得奇怪,因为我以为我可以在不修改字符串的情况下交换到f字符串,只调用调用.
str.format和f-string 之间的语法差异是什么?为什么这个例子略有不同?
这看起来非常基本,但由于它与python语言本身有关,我觉得这里迷路了.根据Python 3.6文档:
>>>help(sum)
...
sum(iterable, start=0, /)
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
...
Run Code Online (Sandbox Code Playgroud)
当我打电话:sum([0,1,2], start=1),我得到:
TypeError: sum() takes no keyword arguments
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
如何更改 Bash 中的命令行参数?解释如何修改 bash 中的输入参数。
但就我而言,我有一组动态的输入参数。我不知道有多少人。
这是我的命令:
send url key1=value1 key2=value2 key3=value3
Run Code Online (Sandbox Code Playgroud)
我想将所有=标志更改为:自动。并且key=value配对不限。
我怎样才能做到这一点?
这个例子说明了我的意思:
Function test{
param(
[parameter(Position = 0, ValueFromPipeline)]
[string]$Param0,
[parameter(Position = 1)]
[ArgumentCompletions("Param1_Opt1", "Param1_Opt2")]
[Array]$Param1 = ('Param1_Opt3', 'Param1_Opt4'),
[switch]$NoHeader
)
"This is $Param0"
"Header :$Param1"
}
Run Code Online (Sandbox Code Playgroud)
很长一段时间以来,我一直依赖所有函数中的参数位置,今天在编写函数时,突然它停止了我使用它们的方式。上面的test函数演示了这个问题。
如果参数具有参数Position = 0属性并且也具有该ValueFromPipeline 属性。当它用于管道时。具有Position属性的下一个参数占据其位置。这也意味着接下来的参数ArgumenCompletions,例如"Param1_Opt1"/ "Param1_Opt2" get 建议。
但我根本没有得到这种行为。
Test "This is For Parameter Zero" "This is For Parameter One"
---- Ouput -----
This is For Parameter Zero
This is For Parameter One
Run Code Online (Sandbox Code Playgroud)
上面的代码按预期工作,第一个字符串正确分配给Param0,第二个字符串正确分配给Param1,更多Param1参数建议有效,但以下内容失败并出现错误,并且管道字符串被分配给Param1 …
编辑
根据疯狂技术人员的建议,我已在 PowerShell UserVoice 网站上提交了一份错误报告:https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/20034763-dynamic-parameters-and-positional-parameters -不-不
原问题
我希望能够在 PowerShell 函数中指定包括静态和动态参数的位置参数。例如我有
function Test-Positional{
[CmdletBinding(PositionalBinding=$false)]
param(
[Parameter(Mandatory=$false,Position=3)][string]$Param4
)
dynamicparam {
$paramDictionary = new-object -Type System.Management.Automation.RuntimeDefinedParameterDictionary
$paramname1 = "Param1"
$values1 = 'some','list','of','values' #would normally get these dynamically
$attributes1 = new-object System.Management.Automation.ParameterAttribute
$attributes1.ParameterSetName = "__AllParameterSets"
$attributes1.Mandatory = $true
$attributes1.Position = 0
$attributeCollection1 = new-object -Type System.Collections.ObjectModel.Collection[System.Attribute]
$attributeCollection1.Add($attributes1)
$ValidateSet1 = new-object System.Management.Automation.ValidateSetAttribute($values1)
$attributeCollection1.Add($ValidateSet1)
$dynParam1 = new-object -Type System.Management.Automation.RuntimeDefinedParameter($paramname1, [string], $attributeCollection1)
$paramname2 = "Param2"
$values2 = 'another','list','like','before'
$attributes2 = new-object System.Management.Automation.ParameterAttribute
$attributes2.ParameterSetName = "__AllParameterSets"
$attributes2.Mandatory …Run Code Online (Sandbox Code Playgroud) parameters powershell powershell-4.0 positional-parameter dynamicparameters
如何创建带有参数的别名并将其插入到文件扩展名中以创建它?我厌倦了这个,但这不起作用:
alias create-bash-file=' echo "#!/bin/bash" > "$1.sh" '
Run Code Online (Sandbox Code Playgroud)
因为 $1 是第一个参数,.sh 是文件扩展名,我想创建一个别名来创建包含“#!/bin/bash”的 bash 文件,但文件名我想将其作为参数,例如,我将写入 create-bash-file filename 这应该生成名为 filename.sh 的 bash 文件
将生日数据添加到Access数据库时遇到麻烦。我已经尝试过运行代码而不会妨碍“生日”,然后它就可以工作了。根据我的研究,“ DBDate”还考虑了毫秒,因此我尝试将来自文本字段的输入保存为DateTime格式,但是,那也行不通。
这是我正在使用的代码。
public partial class Records : System.Web.UI.Page
{
OleDbConnection con;
OleDbCommand cmd;
protected void Page_Load(object sender, EventArgs e)
{
// Trace.Warn("2310", "Beginning of life Page_Load");
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString=@"Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=E:\Dropbox\Temporary\OOD Assignment\Employee Directory\AppData\Employee.accdb";
String empName;
String ebirth;
String job;
String location;
String pnumber;
String email;
OleDbCommand cmd = new OleDbCommand("INSERT into EmployeeRecords ([ename],[job],[location],[phonenumber],[email],[birth])Values(@empName,@job,@location,@pnumber,@email,@ebirth)");
cmd.Connection = conn;
conn.Open();
if(conn.State == ConnectionState.Open)
{
cmd.Parameters.Add("@empName", OleDbType.VarChar).Value = tbEName.Text;
cmd.Parameters.Add("@ebirth", OleDbType.DBDate).Value = …Run Code Online (Sandbox Code Playgroud) 如果我在 bash 脚本的函数中执行此行,它将成功运行:
function myFnc(){
...
variable1=$(date -d 2021-01-01 +%W)
...
}
Run Code Online (Sandbox Code Playgroud)
但是如果我通过运行传递“2021”作为输入参数
myBash.sh '2021'
Run Code Online (Sandbox Code Playgroud)
如果我用相应的变量替换年份,则会收到错误“日期:日期无效#-01-01”:
function myFnc(){
...
variable1=$(date -d $1-01-01 +%W)
...
}
Run Code Online (Sandbox Code Playgroud)
使用引号也没有帮助:
function myFnc(){
...
variable1=$(date -d "$1-01-01" +%W)
...
}
Run Code Online (Sandbox Code Playgroud)
关于如何解决它有什么想法吗?提前致谢!