前言:本文为小编自主学习python的过程中的笔记和对应的练习应用 ,希望能帮助到大家,也希望大家能一起交流学习。
目录
一、for循环----迭代
1.迭代字典
2.一些迭代工具
3.反向迭代和排列后再迭代
4.简单推导
二、pass、del和exec
三、函数
1.定义函数
2.位置参数
3.默认参数
4.收集参数
5.作用域
6.内置函数的查看
一、for循环----迭代
1.迭代字典
要遍历字典的所有关键字,可像遍历序列那样使用普通的for语句,如:
d = {"x":1,"y":2,"z":3}
for key in d:
print(key,"对应的值是",d[key])
也可以使用keys等字典方法来获取所有的键。如果只对值感兴趣,可用d.values。也可以用d.items以元组的方式返回键-值对。for循环的优点之一是,可在其中使用序列解包。如:
d = {"x":1,"y":2,"z":3}
for key,value in d.items():
print(key,"对应的值是",value)
2.一些迭代工具
- zip函数:可将两个序列“缝合”起来,并返回一个由元组组成的序列。返回值是一个适合迭代的对象,要查看其内容,可用list将其转换为列表。且“缝合”后可在循环中将元组解包。如:
a = ['a','b','c']
b = [1,2,3]
c = list(zip(a,b))
print(c)
for a,b in zip(a,b):
print(a,"对应",b)
- 迭代时获取索引
例如你想替换一个字符串列表中所有包含子串'xxx'的字符串
strings = ["mane","2xxx","da"]
index = 0
for string in strings:
if 'xxx' in string:
strings[index] = '[censored]'
index +=1
print(strings)
当然也有另外的方法,那就是使用内置函数enumerate
strings = ["mane","xxx","da"]
for index,string in enumerate(strings):
if 'xxx' in string:
strings[index] = '[censored]'
print(strings)
这个函数让你能够迭代索引-值对,其中的索引是自动提供的。
3.反向迭代和排列后再迭代
函数:reversed和sorted。它们类似于列表方法reverse和sort,但可用于任何序列或可迭代的对象,且不就地修改对象,而是返回反转和排序后的版本。
print(sorted([4,3,6,8,3]))
print(sorted('hello,world!'))
print(list(reversed('hello,world')))
print(''.join(reversed('hello,world')))
注意:sorted返回一个列表,而reversed像zip那样返回一个更神秘的可迭代对象,只管在for循环或join等方法中使用它,不会有任何问题。只是不能对它执行索引或切片操作,也不能直接对它调用列表方法。要执行这些操作,可先使用list对返回的对象进行转换。
4.简单推导
列表推导是一种从其他列表创建列表的方式,类似于数学中的集合推导。列表推导的工作原
理非常简单,有点类似于for循环。如:
a = [x * x for x in range(10)]
print(a)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
这个列表由 range(10) 内每个值的平方组成,如果只想打印那些能被3整除的平方值,可在列表推导中添加一条if语句。
a = [x*x for x in range(10) if x%3 == 0]
print(a)
# [0, 9, 36, 81]
注:这里选择用x%3==0而不直接用(x*x)%3==0是因为仅当x能被3整除时,x*x才能被3整除,因此我们可以讲代码简化
我们还可添加更多的 for 部分。例如:
print([(x, y) for x in range(3) for y in range(3)])
# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)])
作为对比,下面的两个for循环可创建同样的列表 :
result = []
for x in range(3):
for y in range(3):
result.append((x, y))
print(result)
二、pass、del和exec
- pass
在你编写代码时,可将其用作占位符。例如,你可能编写了一条 if 语句并想尝试运行它,但其中缺少一个代码块,而导致这些代码不能运行,这是因为在Python中代码块不能为空。要修复这个问题,只需在中间的代码块中添加一条pass语句即可。
a = input("请输入1或2:")
if a == '1':
print('1')
elif a == '2':
pass
在这里就是当你输入1就会打印1,当你输入2则什么都没有发生。
- del
使用del语句。不仅会删除到对象的引用,还会删除名称本身。
x = ["Hello", "world"]
y = x
y[1] = "Python"
del x
print(y)
print(x)
注意:在这里x和 y虽然 指向同一个列表,但删除 x 对 y 没有任何影响,因为只是删除名称 x ,而 没有删除列表本身(值)。事实上,在Python 中,根本就没有办法删除值,而且你也不需要这样做,因为对于你不再使用的值,Python 解释器会立即将其删除。
- exec
函数 exec 用于将字符串作为 Python 程序执行。如:
exec("print('Hello, world!')")
eval是一个类似于 exec 的内置函数。 exec 执行一系列 Python 语句,而 eval 计算用字符串表示
的 Python 表达式的值,并返回结果( exec 什么都不返回,因为它本身是条语句)。例如,你可使
用如下代码来创建一个 Python 计算器:
a = eval(input("Enter an arithmetic expression: "))
print(a)
三、函数
1.定义函数
def用于定义函数,语法格式:def 函数名():
也可以用:函数名 = lambda 参数:返回值 来定义函数
如编写一个函数,返回一个由斐波那契数组成的列表,且可以自己选择列表中值的个数
def fibs(num):
result = [0, 1]
for i in range(num-2):
result.append(result[-2] + result[-1])
return result
print(fibs(10))
2.位置参数
def 函数名(形参):
在调用函数时需要在对应的形参位置写上你调用时的实际参数,你在定义的时候给了几个参数,那么你在调用的时候就给几个,调用的时候按照参数位置顺序依次赋予值,位置一一对应。如:
def reduce(a,b):
print(a-b)
reduce(3,4) #-1
3.默认参数
你可以为某个参数指定一个默认值,你如果调用的时候不给值就会使用默认值 ;如果调用的时候传了参数,那么这个参数就会覆盖掉默认值
def reduce(a,b=10):
print(a-b)
reduce(10,20) # -10
reduce(10) # 0
4.收集参数
*args 参数前面的星号将提供的所有值都放在一个元组中,也就是将这些值收集起来
def reduce(*args): # args就是一个形参
print(args)
reduce(1,2,3,4,5)
与赋值时一样,带星号的参数也可放在其他位置(而不是最后),但不同的是,在这种情况
下你需要做些额外的工作:使用名称来指定后续参数。如:
def fun(x, *y, z):
print(x, y, z)
fun(1, 2, 3, 4, 5, z=7)
当你要收集关键字参数时,可使用两个星号。如:
def reduce(**kwargs):
print(kwargs)
reduce(a=1,b=2,c=3) # 键和值
这时得到的是一个字典而不是元组
5.作用域
在函数内使用的变量称为局部变量(与之相对的是全局变量)。参数类似于局部变量,因此参数与全局变量同名不会有任何问题。如:
x = 1
def fun():
x = 1
x = x + 1
print(x)
fun()
print(x)
在函数内部给变量赋值时,该变量默认为局部变量,除非你明确地告诉Python它是全局变量
函数global:用于声明全局变量,重新关联全局变量(使其指向新值)。如:
x = 1
def change_global():
global x
x = x + 1
change_global()
print(x)
6.内置函数的查看
import builtins
print(dir(builtins)) # 查看你当前内置函数