再次看了一下<<python编程从入门到实践>>,把以前不常用的一些点记录一下。
删除空白
'python '和’python’看起来几乎没什么区别,但是对于程序而言,这是两个不同的字符串。
- 保证字符串末尾没有空白,使用方法rstrip()
s = 'python '
print(s.rstrip())
>>> 'python'
# 这种删除只是暂时的,并没有改变s本来的值
print(s)
>>> 'python '
- 删除字符串开头的空白,使用方法lstrip()
- 删除字符串两端的空白,使用方法strip()
对于列表的操作
指定位置插入元素,insert(index, value),要指定新插入元素的索引和值.
l1 = ['a', 'b', 'c']
print(l1.insert(0, 'd'))
>>> ['d', 'a', 'b', 'c']
删除元素
- 知道元素索引,用del
del l1[2]
- pop()
l1.pop() # 默认删除l1中的最后一个元素
l1.pop(2) # 删除索引为2的元素
- 根据值删除元素,remove()
l1.remove('a') # 删除l1中第一个为'a'的元素
排序
- sort()方法对列表的改变是永久性的
- sorted()函数是临时的
l1.sort() # 此时l1已经是变化之后的
l1.sort(reverse=True) # 默认reverse=False
print(sorted(l1)) # l1并没有变化
将列表逆序,永久性操作
l1.reverse()
复制列表
l2 = l1 # l2和l1指向同一个列表,其中任意一个的变化都会让另一个变化
l2 = l1[:] # l2变化不影响l1本身
input()函数,将用户的输入解读为字符串
age = input("How old are you?")
How old are you? 21
>>>age
'21'
函数的定义
- 使用默认值的时候,在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参。
- 传递任意数量的实参
def make_pizza(*toppings):
print(toppings)
# *toppings 创建了一个名为toppings的空元组,将所有传进来的实参都封装到这个元组中
- 接受任意数量的关键字参数
def build_profile(**user_info):
profile = {}
for k,v in user_info.items():
profile[k] = v
return profile
user_profile = build_profile(location='priceton', filed='physics')
# **user_info 创建了一个空字典
- 这些参数的定义顺序: 位置参数、*args、默认参数、**kwargs
*可将元组,列表,字符串打散
l = [2,3,4,1,0]
print(*l)
>>>2 3 4 1 0
def func_dic(**kwargs):
print(kwargs)
# **将字典打散
dic = {'a': 1, 'b': 2}
func_dic(**dic)
# 直接用print(**dic)会报错
局部变量和全局变量
- 对于不可变数据类型,可在局部查看全局变量,但是不能直接修改
- 如果想要修改,可以在定义时添加global声明
a = 1
def func():
a += 1
print(a)
func() # 这样会报错,不能在函数里面修改a的值
a = 1
def func():
global a
a += 1
print(a)
func()
>>> 2
- nonlocal 关键字,只能用于局部变量,找上层中离当前函数最近的局部变量
a = 1
def func1():
a = 2
def func2():
nonlocal a
a += 1
func2()
return a
print(a)
print(func1())
>>> 1
>>> 3
函数进阶
- 函数名可以赋值
def f1():
print(1)
f2 = f1
f2()
>>> 1
- 函数名可以作为容器(列表、元组等)类型的元素
l = [f1, f2]
for i in l:
i()
>>>1
>>>1
- 函数名可以作为函数的参数和返回值