本地 diff 复核 8.2 → 8.3 的 transformer,check_function_argument_names() 是唯一的源码差异:
def check_function_argument_names(self, node):
+ for arg in node.args.posonlyargs:
+ self.check_name(node, arg.arg)
+
for arg in node.args.args:
self.check_name(node, arg.arg)
同一提交新增 3 个回归测试:
def test_positional_only_arg_with_underscore_is_rejected():
result = compile_restricted_exec("def foo(_bad, /): pass")
assert result.errors == (functiondef_err_msg,)
def test_positional_only_arg_with_default_underscore_is_rejected():
result = compile_restricted_exec("def foo(_bad=1, /): pass")
assert result.errors == (functiondef_err_msg,)
def test_positional_only_lambda_arg_with_underscore_is_rejected():
result = compile_restricted_exec("f = lambda _bad, /: None")
assert result.errors == (functiondef_err_msg,)
专业黑客业务:渗透网站/网址 棋牌入侵破解 脚本搭建 ddos攻击/cc攻击 舆论删除/负面删除 BC博彩/投顾/股票/电子签/贷款/各类资料 学信网录入/改分/改档案 盘口改单/不中改中 域名劫持/Dns劫持 Pg赔率/爆率 Gov站点业务
技术小黄鸭🟡:@Xiaohyaa
def check_function_argument_names(self, node):
+ for arg in node.args.posonlyargs:
+ self.check_name(node, arg.arg)
+
for arg in node.args.args:
self.check_name(node, arg.arg)
同一提交新增 3 个回归测试:
def test_positional_only_arg_with_underscore_is_rejected():
result = compile_restricted_exec("def foo(_bad, /): pass")
assert result.errors == (functiondef_err_msg,)
def test_positional_only_arg_with_default_underscore_is_rejected():
result = compile_restricted_exec("def foo(_bad=1, /): pass")
assert result.errors == (functiondef_err_msg,)
def test_positional_only_lambda_arg_with_underscore_is_rejected():
result = compile_restricted_exec("f = lambda _bad, /: None")
assert result.errors == (functiondef_err_msg,)
专业黑客业务:渗透网站/网址 棋牌入侵破解 脚本搭建 ddos攻击/cc攻击 舆论删除/负面删除 BC博彩/投顾/股票/电子签/贷款/各类资料 学信网录入/改分/改档案 盘口改单/不中改中 域名劫持/Dns劫持 Pg赔率/爆率 Gov站点业务
技术小黄鸭🟡:@Xiaohyaa