>>> li1.extend(li2)
>>> li.append(element)
>>> ' '.join(li)
return string
>>> str1.split(' ')
return list
>>> str1.strip()
>>> # f.readline() return a string that contains '\n'
>>> # using strip() to elimate characters that isn't need
A dict and list can be changed by passing it to a function.
The default values are evaluated at the point of function definition in the defining scope.
The default value is evaluated only once.
def foo(**args):
print args
def bar(a, b):
print a, b
d = {'a': 1, 'b': 2}
foo(a=1, b=2) # **args means args is a dict, but it accept key word arguments
foo(**d) # when pass a dict to arguments using **d, it unpack it to key word arguments
bar(**d) # same as line above
bar(a=1, b=2) # normal function can pass key word arguments too, but notice it's position
foo(d) # error, must be key word arguments
List arguments can be the same as dictionary, except that it using * symbol.
for i in iterable works because iterable has a __iter__() function that returns an object that has next() function.
elif hasattr(iterable, "__getitem__") \
or hasattr(iterable, "__iter__"):
If iterable has attribute __getitem__, then can use iterable[i], or if it attribute __iter__, both case can use for i in iterable to loop.
hasattr returns True if an object has public member, public function, or even static function. But private member or private function returns false.