1 简述 python i的特点_Python 的特点

变量与赋值

跟元组(tuple)有关:

用元组给多个变量赋值

>>> t = (1, 'a')

>>> x, y = t

>>> x

1

>>> y

'a'

交换变量的值

>>> x, y = y, x

>>> x

'a'

>>> y

1

跟列表(list)有关:

索引可以是负整数,li[-1]表示列表li最后一个整数,负数表示逆序。列表索引范围为 [-len(li), len(li)-1] 。

>>> li = [1, 'a', []]

>>> li[-1]

[]

可以用切片(slide)

>>> li[1:3] #index=1 到 index=3的子列表

['a', []]

>>> li[1:] # 等价于 li[1:len(li)]

['a', []]

>>> li[:2] # 等价于 li[0:2]

[1, 'a']

>>>

快速构造列表

li = [x for x in range(10)] # 用for循环生成列表

li = [x for x in range(10) if x >= 5] # 带有判断语句的构造语句

li = [i+j for i in range(5) for j in range(6) if i < j] # 嵌套循环

li = [[i+j for i in range(5)] for j in range(6)] # 生成二维数组

逻辑运算:

三元操作符

x = 1 if a < b else 10

若 a < b 则 x = 1,否则 x = 10

左右大小判断

a = 7

if 0 <= a <= 10:

print(a)

函数式编程

函数都有返回值,没有return语句的函数默认返回 None,表示没有值

函数内可以嵌套函数

>>> def func1():

... a = 0

... i = 1

... def func2(x):

... j = 10

... return i + x * j # 这里的函数可以用外部的变量 i

... print(func2(a))

...

>>> func1()

1

函数作为参数传递

>>> def func1():

... return 10

...

>>> def func2(f):

... print(f() + 1)

...

>>> func2(func1)

11

在python中内置了排序函数 sorted,可以通过help(sorted)查看其作用。sorted函数的第一个参数可以是列表类型,还有一个名为key的参数,传递一个函数,返回实际要排序的值,如下所示:

>>> li = [1, 4, 3, 2]

>>> def order(x):

... return -x

...

>>> sorted(li, key=order)

[4, 3, 2, 1]

这里key=order是用参数名的方式赋值(python支持这样的语法),可以看出实际排序的方式是变量的相反数。

注:

sorted是常用的排序函数,它还有一个参数是reverse,表示是否降序排序,默认是升序;

另外,列表类型也有一个排序函数,调用方式为 li.sort(key=None, reverse=False),与sorted差不多,只是sort直接作用于 li ,而sorted会生成一个新的列表,而不影响 li 的值

匿名 lambda 函数

有时候不希望专门为一个函数命名,可以用匿名函数,也叫 lambda 函数(原本 lambda 函数是计算机的前身,图灵是在 lambda 函数的基础上提出简易的计算机模型)。lambda 函数的语法:

第一,用 labmda 关键字表明这是一个lambda表达式

列出所有的函数参数,用逗号隔开例如 x, y, z

用冒号 : 分割函数参数和函数体,这个函数体是一条语句,带有返回值

>>> lambda x, y: x + y

at 0x00AE7A48>

>>> a = lambda x, y: x + y

>>> a(1, 20)

21

>>> a = lambda x, y: print("x + y =", x + y)

>>> a(1, 30)

x + y = 31

事实上上面的 print 语句也有返回值None,可以看下面的例子:

>>> a = lambda x, y: (print("x + y =", x + y), 20)

>>> a(2, 20)

x + y = 22

(None, 20) # 这样就可以看出了print的返回值

lambda函数示例:

>>> li = [-1, 2. -3, 4]

>>> li = [-1, 4, -2, 3]

>>> li.sort(key=lambda x: abs(x), reverse=False)

>>> li

[-1, -2, 3, 4]

类与继承

类的基本语法:

class A():

def __init__(self, x):

self.x = x # 变量名加上self.后表示属于类A的变量,可以在任意函数中加入,这是python与其它语言很大的区别

def printx(self): # 所有方法前面都要加一个self,表示属于A这个类

print(self.x)

a = A("abcdefg")

a.printx()

类的继承:

class B(A):

def __init__(self, x):

super().__init__(x) # 初始化父类

def printy(self, y):

print(y)

b = B("gfedcba")

b.printx()

b.printy("123454321")

所有的类默认(即不声明父类的情况)有一个object父类,object 原本就有一些方法(method,类中的函数的术语),可以通过 dir(A)查看

>>> class A():

... pass

...

>>> dir(A)

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

这些函数有的调用方式是a.__class__();有的是dir(a),对应着__dir__方法。常用的__str__在使用 print 函数的时候会默认调用,打印print(a)实际上是打印print(str(a)),也可以写成print(a.__str__()):

>>> a = A()

>>> a.__class__

>>> a.__str__()

'<__main__.a object at>'

>>> a

>>> print(a)

>>> repr(a)

'<__main__.a object at>'

这些方法可以重载,例如:

>>> class A():

... def __init__(self):

... print('create A')

... def __str__(self):

... return 'I am A'

... def __class__(self):

... print('call A.__class__()')

...

>>> a = A()

create A

>>> a.__class__()

call A.__class__()

>>> print(a)

I am A

运算符重载

参考这篇博客:浅析运算符重载

迭代器

希望类可以用于for循环中,可以自己写一个__next__的方法,具体参考官方文档

生成器

生成器可以构造一个迭代器,只要在函数中使用 yield 关键字即可,如下:

>>> def reverse(data):

... for index in range(len(data)-1, -1, -1):

... yield data[index]

...

>>> for char in reverse('golf'):

... print(char)

...

f

l

o

g

yield 表示抛出一个值,然后等待下一次调用next(r),而 for 循环就是调用了next(r),具体看官方文档,示例如下:

>>> r = reverse('golf')

>>> next(r)

'f'

>>> next(r)

'l'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值