切片
在Python中, 切片 (slice) 是对序列型对象 (如 list, string, tuple )的一种高级索引方法。 普通索引只取出序列中 一个下标 对应的元素,而切片取出序列中 一个范围 对应的元素,这里的范围不是狭义上的续片段。
python分割可迭代的对象
一个完整的切片包含两个":"
start_index: 切片切割开始的位置
end_index:切片切割结束的位置,不包含end_index处的元素
step:步长,默认值是1,也可以取负值(从右往左的切割)
连续切片
>>> a[:8][2:5][-1:] [4]
>>a[:8]
[0,1,2,3,4,5,6,7]
>>a[:8][2:5]
[2,3,4]
>>a[:8][2:5][-1:]
[4]
函数
1,函数是一个过程、功能、动作,实现某个功能或者某些功能指令的集合。
2,Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
def(define function)
语法结构:
def 函数名称([参数列表]):
#缩进 函数体
#[ return 返回值]
def my_abs(x):
x = input("输入一个数")
if x >= 0:
return x
else:
return -x
print(my_abs(x))
自定义函数
你可以定义一个由自己想要功能的函数,以下是简单的规则: 1. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。 2. 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。 3. 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 4. 函数内容以冒号起始,并且缩进。 5. return [表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def add_end(L=[]):
if L is None:
L = []
L.append("END")
return L
print(add_end())插入代码片
1、函数的定义,如果有必要的话可以检查一下参数的类型
2、如果函数有返回值,使用return进行返回值操作
3、pass关键字-----相当于一个占位符
4、函数可以返回多个值(实则返回的元组)
函数调用
函数名称([参数])
1,函数名称实则是指向一个函数的引用,也就是说将函数赋值给一个变量,相当于给函数起了一个别名。
2,Python函数的调用 调用函数也就是执行函数。如果把创建的函数理解为一个具有某种用途的工具,那么调用函数就相当于使用该工具。 函数调用的基本语法格式如下所示: [返回值] = 函数名([形参值])
3,函数名:其实就是一个符合 Python 语法的标识符,但不建议读者使用 a、b、c 这类简单的标识符作为函数名,函数名最好能够体现出该函数的功能(如上面的 my_len,即表示我们自定义的 len() 函数)。
3.1形参列表:设置该函数可以接收多少个参数,多个参数之间用逗号( , )分隔。
3.2[return [返回值] ]:整体作为函数的可选参参数,用于设置该函数的返回值。也就是说,一个函数,可以用返回值,也可以没有返回值,是否需要根据实际情况而定。
函数的分类
1、有无参数
有参函数和无参函数
2、有无返回值
有返回值函数和无返回值函数
3、根据定义者角色
系统自定义(内置函数)
第三方 (公司、个人、组织)自定义的
全局变量和局部变量
全局变量
1,全局变量在整个py文件中声明,全局范围内可以使用;局部变量是在某个函数内部声明的,只能在函数内部使用,如果超出使用范围(函数外部),则会报错。 如果想在函数内部改变全局变量,需要在前面加上global关键字,在执行函数之后,全局变量值也会改变。
2,全局变量不能直接在函数内部进行操作,如果需要在函数内部操作全局变量,需要调用global关键字(但是不建议在函数里面操作全局变量)
局部变量
定义函数内的变量叫做局部变量,在函数外是不能访问局部变量
值传递和引用传递
#值传递
def add(x,y):
return x+y
x = float(input("请输入第一个数:"))
y = float(input("请输入第二个数:"))
print(add(x,y))
# 引用传递
def info(fn,msg):
fn()
print(msg)
def print_msg():
print("我们自己定义的函数")
# print(print_msg)
#内存地址,指的是函数的本身
# print(print_msg())
# 引用传递
info(print_msg,"777777")
函数的参数
函数的参数:位置参数、默认值参数、命名参数、可变参数、万能参数
1,位置参数
位置参数,有时也称必备参数,指的是必须按照正确的顺序将实际参数传到函数中,换句话说,调用函数时传入实际参数的数量和位置都必须和定义函数时保持一致。 在调用函数,指定的实际参数的数量,必须和形式参数的数量一致(传多传少都不行),否则 Python 解释器会抛出 TypeError 异常,并提示缺少必要的位置参数。
def power(x,n): # x = 4 n =3 s = 1
while n > 0:
n = n -1 # n = 3-1=2 n = 2-1 n = 1-1
s = s * x # s = 1 *4 s = 4*4 s = 16 * 4
return s
print(power(4,3))
2,默认参数
Python 允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值。这样的话,即便调用函数时没有给拥有默认值的形参传递参数,该参数可以直接使用定义函数时设置的默认值。
def power(x,n=2): # x = 4 n =3
s = 1
while n > 0:
n = n -1 # n = 3-1=2 n = 2-1 n = 1-1
s = s * x # s = 1 *4 s = 4*4 s = 16 * 4
return s
print(power(4))
3,可变参数
在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
def num(*numbers):
sum = 0
for n in numbers:
sum = sum + n*n
return sum
#print(num([1,2,3,4]))
#print(num((1,2,3,4)))
print(num(1,2,3,4))
print(num(1,2,3))
4,关键字参数
关键字参数是指使用形式参数的名字来确定输入的参数值。 通过此方式指定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可。 因此, Python 函数的参数名应该具有更好的语义,这样程序可以立刻明确传入函数的每个参数的含义。
>>> def person(name,age,**kw):
... print("name:",name,"age:",age,"other:",kw)
...
>>> person("zhangsan",18) name: zhangsan age: 18 other: {}
>>> person("zhangsan",18,city="Beijing") name: zhangsan age: 18 other: {'city': 'Beijing'}
>>> person("zhangsan",18,city="Beijing",gender="男") name: zhangsan age: 18 other: {'city': 'Beijing', 'gender': '男'}
>>> d = {"city":"chongqing","gender":"男"}
>>> person("lisi",20,city=d["city"],gender=d["gender"]) name: lisi age: 20 other: {'city': 'chongqing', 'gender': '男'}
>>> person("lisi",20,**d) name: lisi age: 20 other: {'city': 'chongqing', 'gender': '男'}