Python学习(函数)

函数只能返回单个值

python中函数只能返回单个值,如果是返回多个那么是以tuple形式,在相应位置赋值给相应变量本质上来说(tuple还是一个值)

默认参数

默认参数必须指定为不可变对象,如果可变将会导致值修改 默认参数值,默认值是变量,下次使用默认值就是修改之后的默认值了

可变参数

前面加* ,自动组成一个tuple
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum

nums = [1, 2, 3]
calc(*nums)
14

关键字参数

** 自动组成一个dict 注意外部到内部,内部的改变不会影响函数外的值,只是一个拷贝
def person(name, age, **kw):
print(‘name:’, name, ‘age:’, age, ‘other:’, kw)

extra = {‘city’: ‘Beijing’, ‘job’: ‘Engineer’}
person(‘Jack’, 24, **extra)
name: Jack age: 24 other: {‘city’: ‘Beijing’, ‘job’: ‘Engineer’}

命名关键字参数

实际上就是指定参数的赋值对向,如果想要进一步过滤就使用*来对其他关键字进行过滤
def person(name, age, *, city=’Beijing’, job):
print(name, age, city, job)

person(‘Jack’, 24, ‘Beijing’, ‘Engineer’)
Traceback (most recent call last):
File “”, line 1, in
TypeError: person() takes 2 positional arguments but 4 were given

参数组合

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)

尾递归

没有对函数本身进行递归后的表达式计算,而是通过参数,让表达式在参数中计算,减少了对函数的调用

Python学习(对象)

a=’ABC’
b=a
a=’XYZ’
print(b)

b的值会是ABC

因为在内存先生成了变量a,再生成了字符串’ABC’,a指向字符串’ABC’
后又生成变量b指向a,表面上是指向变量a,但是实际上,是通过变量a的指针
指向了变量字符串’ABC’是一种越过了a,直接指向的行为。打个比方就是b找a问到了’ABC’的位置,直接去访问’ABC’,并不是说a后面找不到了,b就找不到’ABC’这种事情。

Python支持多种数据类型,在计算机内部,可以把任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量给关联起来。

对变量赋值x = y是把变量x指向真正的对象,该对象是变量y所指向的。随后对变量y的赋值不影响变量x的指向。

注意:Python的整数没有大小限制,而某些语言的整数根据其存储长度是有大小限制的,例如Java对32位整数的范围限制在-2147483648-2147483647。

Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf(无限大)。

bytes 是指字节对象

一般用于在传输编码的时候,所有打印到显示屏的一般都是unicode

format

除了使用 %这样的类似c语言的输出,还可以使用format方法,format可以看似一个列表,使用{0},{1}这样的索引来引出输出值,{2:.2f}这样的输出:后面加输出格式来指定输出样式例如:

print(‘{0},{1},{2:.3f}’.format(1,’hello’,1.23456))

会输出”1,hello,1.235″(四舍五入的原因)

List的一些方法

List包含的元素类型可以不同
insert(num,value) 指定位置插入元素
len()
pop() 删除末尾元素
append() 增加元素到末尾

tuple可变的案例

空tuple 直接这样定义t=()
但是只要有一个元素就必须多加个,来帮助定义,不然会以为是其他类型变量
t=(1,)

t = (‘a’, ‘b’, [‘A’, ‘B’])
t[2][0] = ‘X’
t[2][1] = ‘Y’
t
(‘a’, ‘b’, [‘X’, ‘Y’])
参考之前我写的a指向b指针的问题