之前一直是写Java的,来到新公司后,后端语言包括python。
这里对python语法做一些记录,防止以后发生类似的问题
1,python是弱类型的语言,比如给同一个变量赋值不同的类型,是不会报错的:
a = 10
a = "hello"
注意,在项目中不要给同一个变量,前后赋值的类型不一样。
2,python没有使用大括号来区分语句块,而是使用严格的缩进:
比如像下面,第一个sum的计算是在bool_a 为Ture的时候,才会进行的,否则sum最终的值为0。而第二个sum的计算即使bool_a 为False也会计算,最终结果为30。
a = 10
b = 20
sum = 0
bool_a = False
if bool_a :
sum = a+b
a = 10
b = 20
sum = 0
bool_a = False
if bool_a :
sum = a+b
个人觉得python严格使用缩进来控制语句块,是一个非常糟糕的设计。
3,python语句结束的时候,不会使用分号
4,python使用英语类似的自然语言的表达,没有使用括号来封装bool表达式:
if True and True:
print("hello")
5,python的函数,类似c++的函数指针,可以将函数名称当作另外一个函数的参数,来使用:
像下面,我们可以在要对两个函数求和的时候,调用func_pointer_call(10,20,sum)。
可能在另外一个地方求差值的时候,调用func_pointer_call(10,20,sub)
def sum(a,b):
return a+b
def sub(a,b):
return a-b
def func_pointer_call(a,b,func)
return func(a,b)
6,python的参数列表,是一个非常危险的地方,特别是默认参数,容易发生不可感知的bug:
比如像下面default_param_func()定义了一个默认参数,这允许我们在调用的时候,最后一个参数不用传递,比如test1()和test2()
如果像下面这样调用test1() 返回的将是-90,而test2()返回的是110。
def default_param_func(a,name,is_user=False):
print("current name is :" + name)
if is_user:
return a+100
return a-100
def test1():
return default_param_func(10,Ture)
def test2():
return default_param_func(10,"laibincs",Ture)
我们在使用test1()的时候,是希望is_user = True,但是事与愿违,而且编译器和运行时都不会报错。
因此在python中定义方法的时候,尽量不要使用默认参数,一定要显示的传递参数文章来源:https://www.toymoban.com/news/detail-424642.html
default_is_user = False
def default_param_func(a,name,is_user):
print("current name is :" + name)
if is_user:
return a+100
return a-100
def test1():
return default_param_func(10,None,default_is_user )
def test2():
return default_param_func(10,"laibincs",Ture)
7,注意python对象的字典的区别:特别是在访问其中内容的时候文章来源地址https://www.toymoban.com/news/detail-424642.html
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def test3():
p = Person("laibincs",60)
name = p.name
age = p.age
def test4():
p = {
"name" : "laibincs",
"age" : 60
}
name =p["name"]
age = p["age"]
到了这里,关于Python个人常见语法问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!