在python中是否可以使用上面的代码而不引发异常?
def myfunc():
pass
# TypeError myfunc() takes no arguments (1 given)
myfunc('param')
Run Code Online (Sandbox Code Playgroud)
通常在php中,在某些情况下,我启动一个没有参数的函数,然后检索函数内部的参数.
在实践中,我不想在myfunc中声明参数,然后将一些参数传递给它.我找到的唯一解决方案是myfunc(*arg).还有其他方法吗?
我有一个函数可以接受带有rest运算符的多个参数.
我想创建一个对象将使用rest运算符收集的参数直接传递给构造函数而不创建对象并调用初始化函数并且不传递整个数组但是参数啊我使用apply()函数.
可能吗 ?使用apply不起作用.
public function myFunc(...arg) {
// something link "new MyClass.apply(args)"
return new MyClass();
}
Run Code Online (Sandbox Code Playgroud) 我有一个 MYSQL 表,其中有一个名为“ offset ”的 ENUM 字段和一些其他列。该字段定义为:
ENUM(0,1),可以为NULL,预定义值NULL
现在我有两台服务器。生产服务器和开发服务器以及用于创建和更新数据库的相同 PHP 脚本。
第一步:应用程序创建记录而不在 CREATE 查询中传递“偏移量”。
第二步:应用程序向用户询问一些数据(不是“偏移”值),读取第一步中插入的行并创建一个数组,更新某些字段(不是“偏移”字段),在自动中创建查询时尚并使用更新后的值再次保存该行。
自动查询生成器简单地读取数组中传递的所有字段并创建 UPDATE 字符串。
在这两个系统中我都获得了这个数组:
$values = array(... 'offset' => null);
Run Code Online (Sandbox Code Playgroud)
并在同一查询中转换它,传递 mysql_real_escape_string 中的值:
UPDATE MyTable SET values..., `offset` = '' WHERE id = '10';
Run Code Online (Sandbox Code Playgroud)
现在问题来了。当我在生产系统中启动查询时,该行被保存,在开发系统中我收到一个错误,数据库说偏移数据错误而没有保存该行。
从 phpmyadmin 当我用第一步创建行时,它在偏移字段中显示 NULL。在系统中保存该字段后,没有出现任何错误,它显示一个空字符串。
两个系统都使用 MySQL 5,但在 Linux 上生产使用 5.0.51,在 Windows 上开发使用 5.0.37。
问题:
为什么一个系统给我一个错误而另一个系统保存该字段?是配置上的区别吗?
为什么当我保存枚举“0”或“1”字段时,它保存的是“”而不是 NULL ?
我在这个 Python for 语句中浪费了一点时间:
class MyListContainer:
def __init__(self):
self.list = []
def purge(self):
for object in self.list:
if (object.my_cond()):
self.list.remove(object)
return self.list
container = MyListContainer()
# now suppose both obj.my_cond() return True
obj1 = MyCustomObject(par)
obj2 = MyCustomObject(other_par)
container.list = [obj1, obj2]
# returning not an empty list but [obj2]
container.purge()
Run Code Online (Sandbox Code Playgroud)
它没有像我预期的那样工作,因为当“清除”中的循环删除列表中的第一个对象时,第二个对象被转移到列表的开头并且循环结束。
我在 for 循环之前解决了重复 self.list 的问题:
...
local_list = self.list[:]
for object in local_list:
...
Run Code Online (Sandbox Code Playgroud)
我认为 for 语句停止工作,因为我正在更改原始列表的长度。有人可以澄清这一点吗?
还有更“优雅”的方式来解决这个问题吗?如果列表中的元素较多,那么每次都复制它似乎不是一个好主意。
也许 filter() 函数是正确的,但我希望有其他方法(如果有)。
我是新手。
总结一下您的有用答案:
我有一个列表推导过滤列表:
l = [obj for obj in objlist if not obj.mycond()]
Run Code Online (Sandbox Code Playgroud)
但是对象方法mycond()可以引发一个我必须拦截的异常.我需要收集循环结束时的所有错误,以显示哪个对象创建了任何问题,同时我想确保循环所有列表元素.
我的解决方案是:
errors = []
copy = objlist[:]
for obj in copy:
try:
if (obj.mycond()):
# avoiding to touch the list in the loop directly
objlist.remove(obj)
except MyException as err:
errors = [err]
if (errors):
#do something
return objlist
Run Code Online (Sandbox Code Playgroud)
在这篇文章中(如何在循环列表本身时删除列表元素而不重复它)我问是否有更好的方法来循环避免列表重复.
社区回答我,以避免列表修改,并使用适用的列表推导,如果我忽略异常问题.
在您的观点中是否有替代解决方案?我可以使用列表推导以这种方式管理异常吗?在这种情况下并使用大名单(我必须考虑哪些大?)我必须找到另一种选择?
我在MovieClip中有一个复杂的形状.
运行时我想根据大小比例更改此Shape的笔触宽度.
如何在不使用绘图API重新绘制整个Shape的情况下更改此属性(几乎不可能,是一个边界非常详细的地图)?
可能吗 ?