def story(name, job): print 'name -->',name,'job -->',job
params1 = {'python', 'language'}
params2 = {'language', 'python'}print story(*params1)print story(*params2)結果:name --> python job --> language
Nonename --> python job --> language
None唔,輸出None的問題我明白了。
2 回答

吃雞游戲
TA貢獻1829條經驗 獲得超7個贊
print params1print params2
你看看他們的輸出是怎樣的:
set(['python', 'language'])set(['python', 'language'])

慕尼黑8549860
TA貢獻1818條經驗 獲得超11個贊
說下自己的理解
樓主定義了二個set , 分別為 params1、params2,如下:
params1 = {'python', 'language'}params2 = {'language', 'python'}
打印params1、params2,結果顯示:
set(['python', 'language'])set(['python', 'language'])
發現他們存儲的順序已經改變,所以猜測set數據結構會將其中的元素排序。
所有的秘密都藏在源碼里,所有我們翻看一下set的實現代碼,查看Python安裝目錄下的Lib/sets.py文件,可以看到Set的定義
class Set(BaseSet): """ Mutable set class.""" __slots__ = [] # BaseSet + operations requiring mutability; no hashing def __init__(self, iterable=None): """Construct a set from an optional iterable.""" self._data = {} if iterable is not None: self._update(iterable) . . .
可以發現元素是存在 _data[] 里 , 我們再查看一下它的插入元素函數
def add(self, element): """Add an element to a set. This has no effect if the element is already present. """ try: self._data[element] = True except TypeError: transform = getattr(element, "__as_immutable__", None) if transform is None: raise # re-raise the TypeError exception we caught self._data[transform()] = True
可以看到,插入元素element時,是將_data[element]設為True。
所以元素的順序就和map中定義的小于號有關。
所以 , 下面的代碼輸出結果一樣
print story(*params1)print story(*params2)
望指正
添加回答
舉報
0/150
提交
取消