0
点赞
收藏
分享

微信扫一扫

Python个人常见语法问题

斗米 2023-04-24 阅读 120

之前一直是写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中定义方法的时候,尽量不要使用默认参数,一定要显示的传递参数

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对象的字典的区别:特别是在访问其中内容的时候

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"]
举报

相关推荐

0 条评论