Python基础知识

1. 直接运行py文件

在Windows系统上是不行的,但是在Mac和Linux上是可以的,方法是

(1)在.py文件的第一行加上一个特殊的注释:

#!/usr/bin/env python3

(2)然后,通过命令给.py文件以执行权限:

$ chmod a+x *.py

之后在终端直接./*.py即可运行

2. 类型

布尔类型为True 或 False; 空值为None,不能理解为0,因为0是有意义的,None是一个特殊的空值

3. 运算

/ 除法,计算结果是浮点数,即使两个整数恰好整除,结果也是浮点数:

3.0

// 地板除,结果永远是整数,只取结果的整数部分

>>> 10 // 3

3

4. 编码

Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符

>>> ord('A')

65

>>> chr(66)

'B'

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上:

# -*- coding: utf-8 -*-

这行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

5. 格式化字符串

(1)使用%

>>> 'Hello, %s' % 'world'

'Hello, world'

>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)

'Hi, Michael, you have $1000000.'

%d 整数

%f 浮点数

%s 字符串

%x 十六进制整数

有些时候,字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%:

>>> 'growth rate: %d %%' % 7

'growth rate: 7 %'

(2)format()

另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符、……,不过这种方式写起来比%要麻烦得多:

>>> 'Hello, , 成绩提升了 %'.format('小明', 17.125)

'Hello, 小明, 成绩提升了 17.1%'

6. list-数组(有序,可变)

>>> classmates = ['Michael', 'Bob', 'Tracy']

// (1)添加元素

>>> classmates.append('Adam')

>>> classmates

['Michael', 'Bob', 'Tracy', 'Adam']

// (2)插入元素

>>> classmates.insert(1, 'Jack')

['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

// (3)删除元素

pop()删除末尾;pop(i)删除指定索引元素

>>> classmates.pop()

'Adam'

>>> classmates

['Michael', 'Jack', 'Bob', 'Tracy']

>>> classmates.pop(1)

'Jack'

>>> classmates

['Michael', 'Bob', 'Tracy']

7. tuple元组(有序,不可变)

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,元组使用“()”,而不是“[]”

>>> classmates = ('Michael', 'Bob', 'Tracy')

*如果元组只有一个数

>>> t = (1) // 结果是1这个数字,而不是元组

>>> t = (1,) // 代表一个数的元组

8. dict-字典

(1)判断key是否存在 判断key是否存在,使用in

'key' in dict返回True 或 False

或者使用get()

dict.get('key')如果不存在,返回None

(2)删除key,使用pop

>>> dict.pop('key')

75

9.set-集合(无序,元素不重复)

(1)

>>> s = set([1, 1, 2, 2, 3, 3])

通过 add(key) 方法可以添加元素

通过 remove(key) 方法删除元素

(2)set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

>>> s1 = set([1, 2, 3])

>>> s2 = set([2, 3, 4])

>>> s1 & s2

>>> s1 | s2

10. 函数

(1)定义函数 def

def my_abs(x):

if x >= 0:

return x

else:

return -x

(2)空函数

pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来

def nop():

pass

pass还可以用在其他语句里,比如:

if age >= 10:

pass

(3)参数检查

对参数类型做检查,只允许整数和浮点数类型的参数。数据类型检查可以用内置函数isinstance()实现:

def my_abs(x):

if not isinstance(x, (int, float)):

raise TypeError('bad operand type')

if x >= 0:

return x

else:

return -x

(4)默认参数

def enroll(name, gender, age=4, city='BeiJing'):

...

>>> enroll('guoxb', 'F')

>>> enroll('guoxb', 'F', city='HeBei')

定义默认参数要牢记:默认参数必须指向不变对象!

def add_end(L=[]):

L.append('END')

return L

>>> add_end()

['END', 'END']

>>> add_end()

['END', 'END', 'END']

以上代码明显是有问题的,要修改上面的例子,我们可以用None这个不变对象来实现:

def add_end(L=None):

if L is None:

L = []

L.append('END')

return L

(5)可变参数

定义

# 请计算a2 + b2 + c2 + …

def calc(numbers):

sum = 0

for n in numbers:

sum = sum + n * n

return sum

# 但是调用的时候,需要先组装出一个list或tuple:

>>> calc( [1, 2, 3] )

14

>>> calc( (1, 3, 5, 7) )

84

# 如果利用可变参数,调用函数的方式可以简化成这样:

>>> calc(1, 2, 3)

14

>>> calc(1, 3, 5, 7)

84

# 函数的参数改为可变参数:

def calc(*numbers):

sum = 0

for n in numbers:

sum = sum + n * n

return sum

# 如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做:

# Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:

>>> nums = [1, 2, 3]

>>> calc(*nums)

14

(6)关键字参数

定义

# 函数person除了必选参数name和age外,还接受关键字参数kw

def person(name, age, **kw):

print('name:', name, 'age:', age, 'other:', kw

>>> person('Michael', 30)

name: Michael age: 30 other: {}

# 可以传入任意个数的关键字参数:

>>> person('Adam', 45, gender='M', job='Engineer')

name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

# 关键字参数有什么用?它可以扩展函数的功能。比如,在person函数里,我们保证能接收到name和age这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。

# 和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去:

>>> extra = {'city': 'Beijing', 'job': 'Engineer'}

>>> person('Jack', 24, **extra)

name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

# **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。

(7)命名关键字参数

定义

# 和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。

def person(name, age, *, city, job):

print(name, age, city, job)

# 调用方式如下:

>>> person('Jack', 24, city='Beijing', job='Engineer')

Jack 24 Beijing Engineer

# 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

def person(name, age, *args, city, job):

print(name, age, args, city, job)

(8)参数组合

定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

def f1(a, b, c=0, *args, **kw):

print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):

print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

(9)小结

*args是可变参数,args接收的是一个tuple;

**kw是关键字参数,kw接收的是一个dict。

可变参数既可以直接传入:func(1, 2, 3),

又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3));

关键字参数既可以直接传入:func(a=1, b=2),

又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181024G1Y3K600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券