python中的函数
1.1自定义函数
1.1.1 函数的定义
? 和Java一样,python也有内置函数和自定义函数,内置函数是python已经定义好的函数,而自定义函数则是我们根据需要自己定义的函数。
? 语法
def 函数名称(参数):
? 函数体
? 其中参数的定义有4种方式:
? 1.(arg1,arg2,…argn)函数若是这种格式的,则在调用时传入的实参也要和形参的数量和顺序必须一致。
? 2.(arg1,arg2=value2,…)这种形式是给了形参一个默认值,如函数a(1,2),arg1的值取1,arg2的值取2,但如果arg2的默认值是3,在你调用a(1)时,此时并不会报错,而是arg1为1,arg2为3.
? 3.(*arg1)这种形式为多个形参的方式,即不确定参数的个数,你可以传入任意多个参数,这些参数的值会被保存在一个元组当中。
? 4.(**arg1)的形式表示在调用时采用“arg1 = value1,arg2 = value2”的方式调用,如 a(x=1,y=2,z=3),此时参数以类似于字典的形式保存{‘x’:1,‘y’:2,‘z’:3}。
? 案例
def calMax(a,b):
if a>b:
print("最大值为:",a)
return a
elif:
print("最大值为:",b)
return b
3.1.2 函数的调用
? 函数的调用很简单,语法如下:
函数体(参数列表)
? 比如如果要调用上面的calMax(a,b)函数,只需要如下语句即可
calMax(2,3)
? 结果如下:
3.1.3 传递值和传递引用
? 在Java中,我们都知道有一个概念,在传递参数时,有值传递和引用传递(所谓的值传递就是在调用函数时,当你将实参传递给函数时,只是将实参的一个副本交给函数,无论函数对该副本作何操作,都不会影响到其本身(本体)。而引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。看不懂也没关系,代码写多了后面回来看就懂了。)。
? 但是在Python中,没有这种方式来传参,二十使用“传对象引用“的方式实际是值传递和引用传递的一种综合。
? 需要注意的是,在Python中,字符串、元组和数值是不可改变的对象,而列表、字典等是可以修改的对象。
? 如下面的案例
def changeValue(num,string,tuple):
num = 5
string = "Trumple"
tuple = (3,6)
num = 8
string = "littleBlack"
tuple = (4,8)
changeValue(num,string,tuple)
print(num,string,tuple)
? 结果为
? 从上面可以看出,即使我们调用了changeValue()函数,三个变量的值仍然没被改变,这也就验证了我们之前学过的知识点,如果函数收到的是字符串、元组或数值,不能直接修改原始的对象,也就是对其本身无影响,相当于**“值传递”**。
? 再看另一个案例
def changeValue(list,dict):
list[0] = "fengfeng"
dict["name"] = "kunkun"
list = ["fanfan","yangyang","miemie"]
dict = {"name":"chenchen","age":24}
changeValue(list,dict)
print(list)
print(dict)
结果为:
?
? 从结果可以看出,如果函数收到的是一个可改变的引用(如字典或者列表等),就能修改对象的原始值。
3.1.4 return语句
? return 语句和Java的一样,都是可以返回一个结果回来,这里就不再赘述
3.2字符串函数
? 字符串函数属于Python的内置函数。
3.2.1 字符串函数的定义
? 灰常简单,和吃饭一样,可以使用单引号或者双引号来创建。
变量名 = ‘字符串的值’
变量名 = “字符串的值”
? 如
str1 = "风好大"
str2 = '吃好喝好,一路走好'
3.2.2 字符串的截取
? 字符串的截取也比较简单,语法如下
字符串变量名[开始下标:结束下标]
? 该语法标识的是从开始下标到结束下标这个范围内截取字符,如果无开始下标,标识从开头(索引为0)到指定结束下标位置截取。如果是截取后几个字符,同样结束下标也可以省略,案例如下。
str1 = "风好大"
str2 = '吃好喝好,一路走好'
print("前五个字符为:",str2[:5])
print("3到6个字符为:",str2[3:6])
print("最后五个字符:",str2[len(str2)-5:])
3.2.3 Python中的三引号
? 先看语法
变量名 = “”“字符串内容”“”
变量名 = ‘’‘字符串内容’‘’
顾名思义,三引号就是三个引号引起字符串内容。三引号里面的内容允许一个字符串跨行,不需要再像Java中经常要拼接了,特别是html代码,用过Java的都知道,不仅痛苦,而且痛苦。案例如下:
html = """<form>
<input type='text' value=''/>
</form>"""
print(html)
? 结果
方法 | 描述 |
---|
string.find(str, beg=0, end=len(string)) | 检测str是否包含在string中,如果beg和end指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 | string.format() | 格式化字符串 | string.split(str=“”, num=string.count(str)) | 以str为分隔符切片string,如果num有指定值,则仅分隔num个子字符串 | string.title() | 返回“标题化”的string,即所有单词都是以大写开始,其余字母均为小写 | string.upper() | 转换string中的小写字母为大写 |
? 当然,除了上述函数外还有很多,这里就不赘述。我们来看看其中的一些方法怎么用,这里用find做案例。
html = '''<div class="about">
2022-12-19 14:44:35<br>
来源:中国台州网'''
index = html.find('class="about">')
len1 = len('class="about">')
index2 = html.find('<br>')
timestr = html[index+len1:index2]
timestr = timestr.strip()
print(timestr)
? 结果
3.3 集合类操作
3.3.1 将列表转换成集合
Python中的集合没有Java的集合那么复杂和庞大,Python中的集合只和Java中的HashSet集合类似,知识一个把不同元素组成一起的数据结构,是Python语言中的基本数据类型。其最好的作用是去重。
? 如下:
list = [3,4,3,5]
print(list)
set = set(list)
print(set)
? 结果
上面的set()方法,就是把list列表转换成集合,另外转成集合后,很显然集合中的相同元素3已经不重复了。当然除了去重之外还可以对集合中元素进行新增、删除、修改
3.3.2 集合的新增、删除和修改
? 集合的新增、删除和修改都是对于可变集合而言(Python中集合分成可变集合和不可变集合)
方法 | 描述 |
---|
add() | 添加元素 | clear() | 清空元素 | discard() | 如果集合中无元素,不会报错;有元素就删除 | pop() | 随机删除集合中的某个元素,取到元素后返回元素的值,s.pop()不能加目标元素,故频率略低 | remove() | 删除目标元素,但集合中如果没有元素就会报错 |
3.3.3 不可变集合
? 不可变集合是不可以新增、修改和删除集合中的元素的, 但是可以作为字典的键,而可变元素不行。另外如果要生成一个不可变集合,可以在将列表转换成集合时使用下面的方法
frozenset(list)
? 另外我们还需要掌握集合、列表、元组和字符串之间的转换
(1)list(s1):将集合s1转换成列表
(2) str(s1):将集合s1转换成字符串
(3) tuple(s1):将集合s1转化成元组
3.3.4 集合中的四种操作符
? Python中给集合提供了四种操作符,分别如下
(1)联合(|):实际就是数学里的并集(不懂什么叫并集的回去叫初中高中数学老师教)
(2)交集(&) : 数学中的交集,简简单单
(3)查补(-) : 两个集合求差,如 s1 - s2
(4) 对称差分(^): 集合的异或,不懂得看这个公式: (s1 - s2) U (s2-s1)
? 看不懂的敲敲下面的案例:
s1 = set([1,3,5])
s2 = set([1,3])
print(s1 | s2)
print(s1&s2)
print(s1-s2)
print(s1^s2)
? 结果
|