上一篇文章分享了 Python中的那些冷知识,地址在这里html
今天将接着分享!!python
函数的参数分三种sql
这三者的具体区别,和使用方法在 廖雪峰的教程 里会详细的解释。这里就不搬运了。json
今天要说的是,传递默认参数时,新手很容易踩雷的一个坑。ruby
先来看一个示例app
def func(item, item_list=[]):
item_list.append(item)
print(item_list)
func('iphone')
func('xiaomi', item_list=['oppo','vivo'])
func('huawei')
在这里,你能够暂停一下,思考一下会输出什么?iphone
思考事后,你的答案是否和下面的一致呢函数
['iphone']
['oppo', 'vivo', 'xiaomi']
['iphone', 'huawei']
若是是,那你能够跳过这部份内容,若是不是,请接着往下看,这里来分析一下。spa
Python 中的 def 语句在每次执行的时候都初始化一个函数对象,这个函数对象就是咱们要调用的函数,能够把它当成一个通常的对象,只不过这个对象拥有一个可执行的方法和部分属性。代理
对于参数中提供了初始值的参数,因为 Python 中的函数参数传递的是对象,也能够认为是传地址,在第一次初始化 def 的时候,会先生成这个可变对象的内存地址,而后将这个默认参数 item_list 会与这个内存地址绑定。在后面的函数调用中,若是调用方指定了新的默认值,就会将原来的默认值覆盖。若是调用方没有指定新的默认值,那就会使用原来的默认值。
你们都知道,类中可供直接调用的方法,只有公有方法(protected类型的方法也能够,可是不建议)。也就是说,类的私有方法是没法直接调用的。
这里先看一下例子
class Kls():
def public(self):
print('Hello public world!')
def __private(self):
print('Hello private world!')
def call_private(self):
self.__private()
ins = Kls()
# 调用公有方法,没问题
ins.public()
# 直接调用私有方法,不行
ins.__private()
# 但你能够经过内部公有方法,进行代理
ins.call_private()
既然都是方法,那咱们真的没有方法能够直接调用吗?
固然有啦,只是建议你千万不要这样弄,这里只是普及,让你了解一下。
# 调用私有方法,如下两种等价
ins._Kls__private()
ins.call_private()
这是个简单例子
my_list = [1, 2, 3, 4, 5]
print(my_list[5])
执行一下,和咱们预期的同样,会抛出索引异常。
Traceback (most recent call last):
File "F:/Python Script/test.py", line 2, in <module>
print(my_list[5])
IndexError: list index out of range
可是今天要说的确定不是这个,而是一个你可能会不知道的冷知识。
来看看,以下这种写法就不会报索引异常,执行my_list[5:],会返回一个新list:[]。
my_list = [1, 2, 3]
print(my_list[5:])
在写代码时,为了代码的可读性,代码的排版是尤其重要的。
为了实现高可读性的代码,咱们经常使用到的就是续行符 \
。
>>> a = 'talk is cheap,'\
... 'show me the code.'
>>>
>>> print(a)
talk is cheap,show me the code.
那有哪些状况下,是不须要写续行符的呢?
通过总结,在这些符号中间的代码换行能够省略掉续行符:[]
,()
,{}
>>> my_list=[1,2,3,
... 4,5,6]
>>> my_tuple=(1,2,3,
... 4,5,6)
>>> my_dict={"name": "MING",
... "gender": "male"}
另外还有,在多行文本注释中 '''
,续行符也是能够不写的。
>>> text = '''talk is cheap,
... show me the code'''
上面只举了一些简单的例子。
但你要学会触类旁通。同样的,在如下这些场景也一样适用
我相信应该有很多人,思惟定式,以为只有 Py3 才能够使用 print(),而 Py2 只能使用print ''。
今天,小明要为 Py2 正名一次。
在Python 2.6以前,只支持
print "hello"
在Python 2.6和2.7中,能够支持以下三种
print "hello"
print("hello")
print ("hello")
在Python3.x中,能够支持以下两种
print("hello")
print ("hello")