python指定函数类型的声明方式
# python指定函数类型的声明方式
# def 函数名(形参1: 类型, 形参2: 类型)->返回值类型:
def linear_search(ls: list, target: int)->int:
for i in range(len(ls)):
if ls[i] == target:
return i
return -1
def linear_search2(ls: list, target: int)->int:
#
# for x in enumerate(ls):# 此时x 返回的类型是元组(位置索引, 值)
# print(x)
# for x in enumerate(ls):# 此时x 返回的类型是元组(位置索引, 值)
# i, v = x
# index, val 这样的操作叫序列解包
for index, val in enumerate(ls):
if val == target:
return index
return -1
if __name__ == '__main__':
import random
random.seed(666)
list1 = [random.randint(1, 100) for _ in range(10)]
print(list1)
print(linear_search(list1, 65)) # 4
print(linear_search(list1, 40)) # -1 找不到
print(linear_search2(list1, 65)) # -1 找不到
print(linear_search2(list1, 40)) # -1 找不到
函数的参数
# 函数的参数
# 1 必须参数: 函数调用时和声明时, 参数的顺序和个数[类型]保持一致
def cal(a: int, mode: str, b: int)->int:
if mode == '+':
return a + b
elif mode == '-':
return a - b
if __name__ == '__main__':
# print(cal(10, 20)) 错
print(cal(10, "+", 20))
# print(cal("+", 10, 20))错
# print(cal( 10, 20, 10))错
# 2 关键字参数: 函数声明时和调用时的顺序可以不一致
if __name__ == '__main__':
print(cal(mode="+", a=10, b=20))
print(cal(10, mode='-', b=20))
# 3 默认参数: 可以给函数设置默认值(此时可传可不传), 需要在后面
def cal2(a: int ,b: int, mode = '+')->int:
if mode == '+':
return a + b
elif mode == '-':
return a - b
if __name__ == '__main__':
print(cal2(10, 40, '-'))
print(cal2(10, 40))
# 4 可变参数(了解) : 函数调用时传入的参数比定义时候的传入的参数多
def func(a, b , *args, **kwargs):
print("a = ", a)
print("b = ", b)
print("*args = ", args)
print("**kwargs = ", kwargs) # 字典
if __name__ == '__main__':
func(10, 100, 222, 3333, c=999, d=888)
字符串
字符串的常⽤操作⽅法有查找、修改和判断三⼤类。
所谓字符串查找⽅法即是查找⼦串在字符串中的位置或出现的次数。
- find():检测某个⼦串是否包含在这个字符串中,如果在返回这个⼦串开始的位置下标,否则则返
回-1。
字符串序列.find(⼦串, 开始位置下标, 结束位置下标)
index():检测某个⼦串是否包含在这个字符串中,如果在返回这个⼦串开始的位置下标,否则则
报异常。
mystr = "python Java C++ golang"
print(mystr.find("Java")) # 7
print(mystr.find("Java", 8, 10)) # -1
print(mystr.find("Java", 6)) # 7
print(mystr.find("python")) # 0
print(mystr.find("J"))# 7
print(mystr.find("A"))# -1
print(mystr.index("python"))# 0
# print(mystr.index("A"))# 错误
- rfind(): 和find()功能相同,但查找⽅向为右侧开始。
- rindex():和index()功能相同,但查找⽅向为右侧开始。
- count():返回某个⼦串在字符串中出现的次数
字符串序列.count(⼦串, 开始位置下标, 结束位置下标)
mystr = "python Java C++ golang Java"
print(len(mystr))
print(mystr.count("java")) # 0
print(mystr.count("Java")) # 2
print(mystr.count("Java", 10, 27)) # 1
修改
所谓修改字符串,指的就是通过函数的形式修改字符串中的数据。(但是原来字符串不变)
- replace():替换
字符串序列.replace(旧⼦串, 新⼦串, 替换次数)
注意:数据按照是否能直接修改分为可变类型和不可变类型两种。字符串类型的数据修改的时候
不能改变原有字符串,属于不能直接修改数据的类型即是不可变类型。
price = "$9.9$"
# print(price.replace("$", "666"))
print(price.replace("$", ""))
# price = price.replace("$", "", 1)
price = price.replace("$", "")
print(price)
price = float(price)
print(price*10)
- split():按照指定字符分割字符串。
1 字符串序列.split(分割字符, num)
注意:num表示的是分割字符出现的次数,即将来返回数据个数为num+1个。
mystr = "hello python, I like it"
print(mystr.split()) # 默认按照空格进行分割
print(mystr.split(","))
print(mystr.split(" ", 2))
print("/usr/local/bin/python3.7 /Users/ericli/PycharmProjects/mmx/day07/demo38.py".split("/"))
- join():⽤⼀个字符或⼦串合并字符串,即是将多个字符串合并为⼀个新的字符串。(列表变字符串)
path = "/Users/ericli/PycharmProjects/mmx/day07/demo38.py"
ls = path.split("/")
print(ls)
print("".join(ls))
print(" ".join(ls))
print("/".join(ls))
print("C:" + "\\".join(ls))
- capitalize():将字符串第⼀个字符转换成⼤写。
- title():将字符串每个单词⾸字⺟转换成⼤写。
- lower():将字符串中⼤写转⼩写。
- upper():将字符串中⼩写转⼤写。
- strip():删除字符串两侧空⽩字符。
- lstrip():删除字符串左侧空⽩字符。
- rstrip():删除字符串右侧空⽩字符。
- ljust():返回⼀个原字符串左对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串。
- rjust():返回⼀个原字符串右对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串,语法和ljust()相同。
- center():返回⼀个原字符串居中对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串,语法和ljust()相同。
-
判断
所谓判断即是判断真假,返回的结果是布尔型数据类型:True 或 False。
- startswith():检查字符串是否是以指定⼦串开头,是则返回 True,否则返回 False。如果设置开
始和结束位置下标,则在指定范围内检查。 - endswith()::检查字符串是否是以指定⼦串结尾,是则返回 True,否则返回 False。如果设置开
始和结束位置下标,则在指定范围内检查。 - isalpha():如果字符串⾄少有⼀个字符并且所有字符都是字⺟则返回 True, 否则返回 False。
- isdigit():如果字符串只包含数字则返回 True 否则返回 False。
- isalnum():如果字符串⾄少有⼀个字符并且所有字符都是字⺟或数字则返 回 True,否则返回False。
- isspace():如果字符串中只包含空⽩,则返回 True,否则返回 False。