Python学习总结-基础篇

python

为什么学习python

1)之前一直有学习python的想法,在Java和Python之间,我之前的选择是Java,因为时间和精力有限,就选择了一个方向,深入下去。

2)空闲时间实在太多,处理完日常工作,又分出考各种证书的学习时间,还有富裕。干点啥呢,学习python吧。

3)总是听说python在表格处理/自动化运维/网络爬虫/人工智能等领域有对应的实践,那就学习一下呗,所谓技多不压身。

话不多说,开始学习!

第一部分-类型和表达式部分

【注意】:2.7版本之后,print "xxx" 要换成 print("xxx")

Hello,world!

>>> print("Hello world!")

Hello world!

两个数相乘

>>> print(3*6)

18

变量定义

smart_city="网研院"

print(smart_city)

smart_city="智研院"

print(smart_city)

【注意】这里的smart_city = "xxxx"不叫变量赋值,而叫变量绑定,python维护了一个符号表(变量名)以及符合对应的值,这个对应关系就叫做绑定,一个符号可以绑定任意类型的值。

两数相乘

x = input()

y = input()

print(int(x) * int(y))

【注意】input()函数输入的是字符串格式,所以自己在键盘输入的整数其实并不是正整数,而是字符串形式。所以在执行语句x*y会报错。因为x和y都是字符串形式,不可以相乘。

所以需要进行强制转换。

函数定义

#函数定义

def bi_smart():

print("联通智能城市研究院")

bi_smart()

强制类型转换

#强制类型转换

print(1+int("1"))

print(str(1)+"1")

输出:

2
11

【注意】:int对字符串进行转换时,要求字符类型是整数int('1'),或者输入的是纯数字 int(1.1),而不能是int('1.1')这种类型,否则就会报错如下:

ValueError: invalid literal for int() with base 10: '1.1'

字符串

1)python三引号

#字符串:Python 中三引号可以将复杂的字符串进行赋值,三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。

print('''python

学习

路线''')

输出

python

学习

路线

2)原始字符串

#原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。

print(r'python 学习\c\d\t')

输出

python 学习\c\d\t

 3)带转义字符的字符串

#带转义字符的字符串

print('python 学习\n路线')

输出

python 学习

路线

序列

1)列表

列表特点:

#列表:列表的数据项不需要具有相同的类型,并且列表是可变的

L1=['abc',1,True,"python"]

增删改查基本操作:

#访问列表中的值,索引访问

L=['abc',1,True,"python"]

print(L[1])

print(L[1:])

print(L[1:3])

#更新列表元素

L.append("Tom")

#删除列表元素

del L[1]

#分片删除

del L[3:]

#分片赋值

L[1:3]=['1','abc',1992]

脚本操作符

#脚本操作符:列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表

#操作符"+",组合

L1=[1,2,3]

L2=[4,5,6]

L3=L1+L2

print("列表之间+组合:")

print(L3)

#列表长度函数,长度

print("列表L1的长度:")

print(len(L1))

#操作符"*",重复

L4=["smart_city"]

print("重复:")

print(L4*4)

#元素是否在列表中

print("判断元素7是否在列表L1中")

print(7 in L1)

#迭代

print("列表L1迭代输出")

for x in L1:print(x)

输出

列表之间+组合:

[1, 2, 3, 4, 5, 6]

列表L1的长度:

3

重复:

['smart_city', 'smart_city', 'smart_city', 'smart_city']

判断元素7是否在列表L1中

False

列表L1迭代输出

1

2

3

python列表函数&方法

#python列表函数&方法

#比较两个列表的元素:python2中的函数cmp,但是在python3中已经不存在该函数,需要引入operator模块

import operator

L1=[1,2,3]

L2=[4,5,6]

#判断列表是否相等

print(operator.eq(L1,L2))

#判断列表的大小关系:lt(小于)/le(小于等于)/gt(大于)/ge(大于等于)

print(operator.__lt__(L1,L2))

#max函数:返回列表中最大的元素

print(max(L1))

#min函数:返回列表中最小的元素

print(min(L1))

2)元组

特点:不可变

#元组(tuple):Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。

t1=(1,2,3)

print(t1)

#逗号引发的python编译问题,Python具备返回多个值的特性,所以每当我们在一个函数或者方法中返回多个值时,这些值就会被打包成一个元组进行返回

Tuple=[1,2,3],

print(Tuple)

输出:因为一个逗号的存在,列表变成了元组返回

([1, 2, 3],)

3)字符串:python字符串格式化

#python字符串格式化,Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,

#但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。

print("学习%s的过程,%s下去" % ("python","坚持"))

输出:

学习python的过程,坚持下去

4)字典:针对字典dict的操作原理同list/tuple基本一致

""" Python字段dict:字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }

"""

d={'a':1,'b':2,'c':3}

#打印字典中所有元素

print(d)

#打印字典中对应键的值

print(d['a'])

#根据键删除字典中的元素

del d['a']

print(d)

Python序列解包

#python序列解包,实用的python语法糖

>>> x,y,z=1,2,3

>>> print(x)

1

#*获取的值默认是list

>>> a,b,*c=1,2,3,4

>>> print(c)

[3, 4]

#如果左值比右值要多,那么带*的变量默认为空

>>> A,B,C,*D=1,2,3

>>> print(D)

[]

bool值&bool运算

#bool运算

print(1<2 and 10>11)

#bool值:bool()函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。

#bool是int 的子类。

#1.当对数字使用bool函数时,0返回假(False),任何其他值都返回真。

print(bool(0))

print(bool(1))

#2.当对字符串使用bool函数时,对于没有值的字符串(也就是None或者空字符串)返回False,否则返回True。

print(bool())

print(bool(None))

print(bool("abc"))

#3.bool函数对于空的列表,字典和元祖返回False,否则返回True。

print(bool([]))

a=[]

a.append("1")

print(bool(a))

#4.用bool函数来判断一个值是否已经被设置。

x = input('Please enter a number :')

print(bool(x.strip()))

python语句块

#语句块。:开始语法块,缩进的所有内容都是一个语法块

if(10>1):

print("YES")

else:

print("NO")

python三元表达式

#python中的三元表达式,python中没有其他语言中的三元表达式,不过有类似的实现方法

a=1

b=2

c=""

c="YES" if a<b else "NO"

print(c)

相等比较

#运算符"=="和"is"的差别:==比较的是内容,is比较的是引用。

a=[1,2,3]

b=a

c=[1,2,3]

print(a==b)

print(a==c)

print(a is b)

print(a is c)

输出

True

True

True

False

循环

#循环:for循环类似C#的foreach,注意for后面是没有括号的,python真是能简洁就尽量简洁。

for x in range(1,3):

print(x)

for key in {"a":1,"b":2}:

print(key)

for key, value in {"a":1,"b":2}.items():

print(key,value)

for x,y,z in [[1,2,3],['a','b','c']]:

print(x,y,z)

输出

1

2

a

b

a 1

b 2

1 2 3

a b c

 pass、exec和eval

#pass、exec和eval

""" exec 执行储存在字符串或文件中的 Python 语句。

语法:exec(object[, globals[, locals]])

参数:

object:表示需要被指定的Python代码

globals:表示全局命名空间(存放全局变量),如果被提供,则必须是一个字典对象。

locals:表示当前局部命名空间(存放局部变量),如果被提供,可以是任何映射对象。如果该参数被忽略,那么它将会取与globals相同的值。

"""

exec('print(x)',{"x":"abc"})

#eval:可以把字符串里的字符转换为可执行代码,但只支持一行字符。可以返回执行后得到的值

print(eval('1+2+3+4+5'))

#Python pass 是空语句,是为了保持程序结构的完整性。pass 不做任何事情,一般用做占位语句。

#如果定义一个空函数程序会报错,当你没有想好函数的内容是可以用 pass 填充,使程序可以正常运行。

def passFuc():

pass

for x in range(1,10):

if(x==5):

print(x)

else:

passFuc

输出:

abc

15

5

 


 

第二部分-函数

形参和实参之间是按值传递的,当然有些类型的值是引用(对象、列表和字典等)

#函数部分

#基本函数定义:

def func():

print("Hello,python")

func()

#带单一返回值的函数

def funcWithSingleReturn():

return "funcWithDataReturn"

print(funcWithSingleReturn())

#带多个返回值的函数

def funcWithMultiReturn():

return "funcWithDataMultiReturn1,funcWithDataMultiReturn2"

print(funcWithMultiReturn())

#包含两个参数的函数

def funcWithTwoParams(x,y):

print(x,y)

funcWithTwoParams(1,2)

#形参和实参数量不一致的函数

def funcUncatchNumParams(x,y,*rest):

print(x,y,*rest)

funcUncatchNumParams(1,2,3,4,5)

#命名参数函数

def funcWithName(x,y,z):

print(x,y,z)

funcWithName(x=1,y=2,z=3)

#参数中包含默认值的函数

def funcWithDefaultParam(x,y,z=3):

print(x,y,z)

funcWithDefaultParam(5,4)

#收集命名参数

def func_with_collection_rest_naned_parameters(*args, **named_agrs):

print(args)

print(named_agrs)

func_with_collection_rest_naned_parameters(1, 2, 3, x = 4, y = 5, z = 6)

#集合扁平化

func_with_collection_rest_naned_parameters([1, 2, 3], {"x": 4, "y": 4, "z": 6}) #这会导致args[0]指向第一个实参,args[1]指向第二个实参。

func_with_collection_rest_naned_parameters(*[1, 2, 3], **{"x": 4, "y": 4, "z": 6}) #这里的执行相当于func_with_collection_rest_naned_parameters(1, 2, 3, x = 4, y = 5, z = 6)。


 

第三部分-作用域

#函数作用域

#局部变量,只有函数执行才会开启一个作用域,输出:1

if(2>1):

x=1

print(x)

#使用vars()函数可以访问当前作用域的变量,输出:2

y=2

print(vars()['y'])

#局部变量会覆盖隐藏全局变量

#使用global定义变量,可以访问全局变量,输出分别是1和2,因为global修饰了a,此时print输出的全局变量1,但是函数内部又进行了更改,所以在外部输出的是2

#这样也就解决了,在函数内部想使用全局变量,使用之后又再赋值之后外部进行输出或者另作他用

a=1

def funcWithGlobalVar():

global a

print(a)

a=2

funcWithGlobalVar()

print(a)

#locals() 函数会以字典类型返回当前位置的全部局部变量。输出:{'args': 2, 'x': 1}

def funcWithLocalVar(args):

x=1

print(locals())

funcWithLocalVar(2)

#每个函数定义时都会记住所在的作用域。

#函数执行的时候会开启一个新的作用域,函数内变量访问的规则是:先访问当前作用域,如果没有就访问函数定义时的作用域,递归直到全局作用域。

b=1

def funcWithNewArea():

c=2

print(b,c)

#如果在当前作用域出现了b=2赋值语句,则输出的是2,2;如果去掉下面这行赋值语句,会去函数定义的作用域去查找b的值,因为函数定义时也没有赋值,此时会递归到全局作用域,输出的时1,2

b=2

funcWithNewArea()

#变量访问的始终是当前作用域

x=1

def funcWithCurrentVar():

x,y=2,3

print(x,y)

funcWithCurrentVar()#输出(2,3)

print(x)#输出1

#Python闭包:关于闭包的解释,来自:https://www.cnblogs.com/s-1314-521/p/9763376.html

#a和b都是外函数的临时变量

def outer(a):

b=10

def inner():

print("python闭包:",a+b)

#外函数返回内函数的引用

return inner

demo=outer(5)

#demo存了外函数的返回值,也就是inner函数的引用,这里相当于执行inner函数

demo()

##函数作为对象

def func(fn, arg):

fn(arg)

func(print, "hello")

func(lambda arg : print(arg), "hi")


第四部分-模块

【定义】:在Python中,一个.py文件就称之为一个模块(Module)

【使用模块的好处】:

 1) 大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。

 2) 使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突

#a.py

print (__name__)

def say_a():

print("a")

在另一个文件中引入模块a:

#b.py

#这种引入方式,破坏了对命名空间的管理

from a import *

def say_b():

a.say_a()

print("b")

print (__name__)

#此处,模块a是被import之后调用,所以__name__属性的值是文件名a

print(a.__name__)

最后,在demo.py中引入模块b,调用a中的函数

#demo.py

import b

print(__name__)

print("分割线------")

b.say_b()

b.say_a()

b.a.say_a()

【注意】:"_name"属性,如果当前文件主动运行,该值为"__main__",如果是被其他模块引入,比如在b.py文件中那样,print("a.__name__"),输出的是a模块的名字"a";


第五部分-异常管理

#异常

#自定义异常:必须继承于BaseException

class SmartException(BaseException):

print("smart_exception")

#引发和捕获异常

try:

raise SmartException

except:

print("捕获SmartException异常")

#捕获多种异常

try:

raise SmartException

except(SmartException,NameError):

print("捕获多种异常")

#访问异常实例

try:

raise SmartException("访问异常实例")

except(SmartException,NameError) as e:

print(e)

#按类型捕获异常

try:

raise SmartException

except SmartException:

print("SmartException")

except TypeError:

print("typeError")

#try-except-else-finally

try:

pass

except :

print("try-except-else-finally")

else:

print("else结构")

finally:

print("总会执行finally")


第六部分-面向对象编程

这部分内容整合自:面向对象编程 - 廖雪峰的官方网站 (liaoxuefeng.com)

python闭包和装饰器,以及@语法糖

#Python闭包和@语法糖,python装饰器

def log(func):

def wrapper(*param):

print("开始调用函数")

func(param)

print("结束调用")

return wrapper

@log

def eat(name):

print("%s在哭" % name)

eat("小孩子")

函数式编程:

#函数式编程

g=lambda x:2*x+1

print(g(5))

print(list(filter(lambda x: x%2,range(1,10))))

print(list(map(lambda x: 2*x,range(10))))

  

以上是 Python学习总结-基础篇 的全部内容, 来源链接: utcz.com/z/388704.html

回到顶部