01.利用Python进行数据分析之Python语法基础

360影视 国产动漫 2025-03-19 23:46 4

摘要:Python的语⾔设计强调的是可读性、简洁和清晰。有些⼈称Python为“可执⾏的伪代码”。

Python的语⾔设计强调的是可读性、简洁和清晰。有些⼈称Python为“可执⾏的伪代码”。

Python使⽤空⽩字符(tab和空格)来组织代码,如:

sum = 0for i in range(0,101):sum += iprint(sum)5050

冒号标志着缩进代码块的开始,冒号之后的所有代码的缩进量必须相同,直到代码块结束。

Python的语句不需要⽤分号结尾。但是,分号却可以⽤来给同在⼀⾏的语句切分,但Python不建议将多条语句放到⼀⾏,这会降低代码的可读性。

a = 1; b= 2; c = 3print(a,b,c)1 2 3

Python语⾔的⼀个重要特性就是它的对象模型的⼀致性。每个数字、字符串、数据结构、函数、类、模块等等,都是在Python解释器内被认为是Python对象。每个对象都有类型(例如,字符串或函数)和内部数据。在实际中,这可以让语⾔⾮常灵活,因为函数也可以被当做对象使⽤。

任何前⾯带有井号#的⽂本都会被Python解释器忽略。这通常被⽤来添加注释。也可以在执⾏过的代码后⾯添加注释。如:

# 为 x 赋值 1x = 1x = 1 # 为 x 赋值 1

可以⽤圆括号调⽤函数,传递零个或⼏个参数,或者将返回值给⼀个变量:

def sum(a, b):return a + bsum(1,2)3函数可以使⽤位置和关键词参数:sum(a=1,b=2)3

Python中的每个对象都有附加的函数,称作⽅法,可以⽤来访问对象的内容。

class Sum:def __init__(self, x, y):self.x = xself.y = ydef sum(self):return self.x + self.ys = Sum(1, 2)# 调用对象的方法s.sum3

Python中创建变量就等于在等号右边创建了⼀个对这个变量的引⽤。

a = [1,2,3]b = aa[1, 2, 3]b[1, 2, 3]a.append(4)a[1, 2, 3, 4]b[1, 2, 3, 4]

在Python中,a和b实际上是同⼀个对象。

当你将对象作为参数传递给函数时,新的局域变量创建了对原始对象的引⽤,⽽不是复制。如果在函数⾥绑定⼀个新对象到⼀个变量,这个变动不会反映到上⼀层。因此可以改变可变参数的内容。

动态引⽤(强类型)

Python中的对象引⽤不包含附属的类型。

a = 1type(a)inta = 'abc'type(a)str

变量是在特殊命名空间中的对象的名字,类型信息保存在对象⾃身中。⼀些⼈可能会说Python不是“类型化语⾔”。这是不正确的。

'5' + 5TypeError Traceback (most recent call last)Cell In[57], line 1----> 1 '5' + 5TypeError: can only concatenate str (not "int") to str

在某些语⾔中,例如Visual Basic,字符串‘5’可能被默许转换(或投射)为整数,因此会产⽣10。但在其它语⾔中,例如JavaScript,整数5个能被投射成字符串,结果是联结字符串‘55’。在这个⽅⾯,Python被认为是强类型化语⾔,意味着每个对象都有明确的类型(或类),默许转换只会发⽣在特定的情况下,如:

a = 3.6type(a)floatb = 2type(b)inta + b5.6

知道对象的类型很重要,最好能让函数可以处理多种类型的输⼊。你可以⽤isinstance函数检查对象是某个类型的实例:

a = 1isinstance(a, int)True

isinstance可以⽤类型元组,检查对象的类型是否在元组中:

isinstance(a, (int, float))True属性和方法

Python的对象通常都有属性(其它存储在对象内部的Python对象)和⽅法(对象的附属函数可以访问对象的内部数据)。可以⽤obj.attribute_name访问属性和⽅法:

a = 'abc'a.capitalize'Abc'也可以⽤getattr函数,通过名字访问属性和⽅法:getattr(a, 'capitalize')

在其它语⾔中,访问对象的名字通常称作“反射”。这里不会⼤量使⽤getattr函数和相关的hasattr和setattr函数,使⽤这些函数可以⾼效编写原⽣的、可重复使⽤的代码。

鸭子类型

一般情况下,可能不关⼼对象的类型,只关⼼对象是否有某些⽅法或⽤途。这通常被称为“鸭⼦类型”,来⾃“⾛起来像鸭⼦、叫起来像鸭⼦,那么它就是鸭⼦”的说法。

比如:可以通过验证⼀个对象是否遵循迭代协议,判断它是可迭代的。对于许多对象,这意味着它有⼀个iter魔术⽅法,其它更好的判断⽅法是使⽤iter函数。

def isiterable(o):try:iter(o)return Trueexcept TypeError:return Falseisiterable('hello')Trueisiterable([1,2,3])Trueisiterable(1)False

可以⽤这个功能编写可以接受多种输⼊类型的函数。常⻅的例⼦是编写⼀个函数可以接受任意类型的序列(list、tuple、ndarray)或是迭代器。你可先检验对象是否是列表(或是NumPy数组),如果不是的话,将其转变成列表:

def tolist(o):if not isinstance(o, list) and isiterable(o):return list(o)tolist('hello')

在Python中,模块就是⼀个有.py扩展名、包含Python代码的⽂件。假设有以下模块:

# some_module.pyPI = 3.14159def f(x):return x + 2def g(a, b):return a + b

如果想从同⽬录下的另⼀个⽂件访问some_module.py中定义的变量和函数,可以:

import some_moduleresult = some_module.f(5)pi = some_module.PI# 或者from some_module import f, g, PIresult = g(5, PI)

使⽤as关键词,你可以给引⼊起不同的变量名:

import some_module as smfrom some_module import PI as pi, g as gfr1 = sm.f(pi)r2 = gf(6, pi)

如:

1 - 2-13 + 585 False

二元运算符:

a + b a加ba - b a减ba * b a乘以ba / b a除以b,结果只取整数部分a ** b a的b次幂a & b a或b都为True,则为True;对于整数,取逐位ANDa | b a或b有一个为True,则为True;对于整数,取逐位ORa ^ b 对于布尔,a或b有一个为True,则为True,二者都为True,为False;对于整数,取逐位EXCLUSIVE - ORa == b a等于b,则为Truea != b a不等于b,则为Truea a > b, a >= b a大于(或大于等于)b,则为Truea is b a和b引用同一个 Python 对象,则为Truea is not b a和b引用不同的 Python 对象,则为True

要判断两个引⽤是否指向同⼀个对象,可以使⽤is⽅法。is not可以判断两个对象是不同的:

a = [1,2,3]b = ac = list(a)a is bTrueb is aTruea is cFalsea is not cTrue

因为list总是创建⼀个新的Python列表(即复制),我们可以断定c是不同于a的。使⽤is⽐较与==运算符不同,如下:

a == cTrue

is和is not常⽤来判断⼀个变量是否为None,因为只有⼀个None的实例:

a = Nonea is NoneTrue可变与不可变对象

Python中的⼤多数对象,⽐如列表、字典、NumPy数组,和⽤户定义的类型(类),都是可变的。意味着这些对象或包含的值可以被修改:

a = ['abc', 2, (3, 4)]a[1] = (5,6)a['abc', (5, 6), (3, 4)]

其它的,例如字符串和元组,是不可变的:

a = ('abc', 2, (3, 4))a[1] = (5,6)TypeError Traceback (most recent call last)Cell In[139], line 1----> 1 a[1] = (5,6)TypeError: 'tuple' object does not support item assignments = 'hello's[2] = 'x'TypeError Traceback (most recent call last)Cell In[149], line 1----> 1 s[2] = 'x'TypeError: 'str' object does not support item assignment

来源:IT职业教育

相关推荐