Python基础 函数
# 函数
- 函数是一种代码形式
- 函数应该能完成一项特定的工作,而且一般一个函数值完成一项工作(可以理解为 一个东西要有始有终,让一个程序形成一个闭环才能做成函数否则没有意义)
- 有些语言,分函数和过程两个概念,通俗的解释是有返回结果的叫函数,无返回结果的叫过程,Python不加以区分
- 函数的使用
- 函数使用要先定义
- 使用函数俗称调用
1 # 定义一个函数 2 # 只是定义的话不会执行 3 # 1.def关键字后面跟一个空格 4 # 2.函数名,自己定义,起名需要遵循命名规则,约定俗成,大驼峰命名只给类用 5 # 3.后面括号和冒号不能省,括号内可以有参数 6 # 4.函数内所有的代码要缩进 7 8 def func(): 9 print("爱生活","爱拉芳") 10 print("我是一个有个性的函数") 11 print("函数结束了")
# 函数的参数和返回值
- 参数:负责给函数传递一些必要的数据或者信息
- 形参(形式参数):在函数定义的时候用到的参数,没有具体值,只是一个占位符号
- 实参(实际参数):在调用函数的时候输入的值
- 返回值:调用函数的时候一个执行结果
- 使用return返回结果
- 如果没有值需要返回,我们推荐使用return None 表示函数结束
- 函数一旦执行return,则函数立即结束
- 如果函数没有return关键字,则函数默认返回关键字None
# 形参和实参的案例 # 参数person只是一个符号 # 调用的时候用另一个 def hello(person): print("{0},你好吗?".format(person)) print("{},你知道刘能去哪了吗".format(person)) return None p = "小美" hello(p)
1 # 99乘法表 2 3 for o in range(1,10): 4 for i in range(1,o ): 5 print(i*o,end = " ") 6 print()
1 # 升级版 2 for o in range(1,10): 3 for i in range(1,o + 1 ): 4 if i* o < 10: 5 6 print(i,"*",o ,"=",i*o,"",end = " ") 7 8 elif i*o==10 or i*o == 15 or i*o == 20: 9 print(i,"*",o ,"=",i*o,"",end = " ") 10 else: 11 print(i,"*",o ,"=",i*o,end = " ") 12 print() 13 14
# 函数分解 def printLine(line_nem): for i in range(1,line_nem + 1 ): if i* line_nem < 10: print(i,"*",line_nem ,"=",i*line_nem,"",end=" ") elif i*line_nem==10 or i*line_nem == 15 or i*line_nem == 20: print(i,"*",line_nem ,"=",i*line_nem,"",end=" ") else: print(i,"*",line_nem ,"=",i*line_nem,end=" ") print() def jiujiu(): for o in range(1,10): printLine(o) jiujiu()
# 参数详解
-参数分类
- 普通参数、位置参数
- 关键字参数
- 收集参数
1 # 普通参数案例 2 def normal_papr(one,two,three): 3 print(one + two) 4 return None 5 6 normal_papr(1,2,3)#按顺序识别
# 默认参数案例 def defaulf_para(one,two,three=100): print(one + two) return None defaulf_para(1,2)
# 关键字参数 def keys_para(one,two,three): print(one+two) print(three) return None keys_para(one=1,two=2,three=3) keys_para(two=2,three=3,one=1) #这样写 摆脱了顺序的束缚
# 收集参数
- 吧没有位置,不能和定义时候的参数位置相对应参数放入一个特定的数据结构中
- 语法
def func(*args):
func body
按照list 使用方式访问args得到传入的参数
调用:
func(p1,p2,p3,....)
- 参数名args不是必须的这么写,但是我们推荐直接用args 约定俗成
- 参数名 args前需要有星号(*)
- 收集参数可以喝其他参数共存
# 收集参数 # 函数模拟一个学生进行自我介绍,但是具体内容不清楚\ # args 把他看做一个list def stu(*args): print("Hello,大家好,我自我介绍下,") #type 函数作用是检测变量的类型 print(type(args)) for time in args: print(time) pass stu("liukeji",18,"北京海淀","liuerha") stu("小白")
# str字符串
-str
- 格式化
- 内建函数
p = '你是shui谁啊啊啊啊啊' print(p)
s = "你猜我是谁啊啊啊啊啊" print(s)
w = ''' 你管我呢啊啊啊 啊 啊 啊 啊 啊 ''' print(w)
# 转义字符
- 用一个特色的方法表示出一系列不方便写出的内容,比如回车键,换行符,退格键
- 借助反斜杠字符:一旦字符串中出现反斜杠,则反斜杠后面一个或者几个字符表示已经不是原来的意思了,进行了转义
- 在字符串中一旦出现反斜杠就要加倍小心,可能有转义字符出现
- 不同系统对应换行操作有不同的表示
- Windows:\n
- Linux:\r\n
# 转义字符的案例 # 想表达 Let's Go # 使用转义字符 s = 'Let\'s Go' print(s) w = "c:\\User\\anaconda" print(w) #回车换行 #想表达的效果是: # Ich # lieb # Wangxiaojing #Windows f = "Ich\nlieb\nWangxiaojing" print(f) m = "Ich\r\nlieb\r\nWangxiaojing" print(m)
# 格式化
- 把字符串按照一定格式进行打印或者填充
- 格式化的分类:
- 传统格式化
-format
# 字符串的传统格式化
- 使用 % 进行格式化
- %(百分号)也叫占位符
# %s 表示简单的字符串 # 占位符可以单独使用 s = "I love %s" p = input("请输入你的名字:") print(s) s = "I love %s" print(s% p)
# 占位符一般只能被同类型替换(int类型属于特列,目前是可以的),或者替换类型能被转换成占位符的类型 print("I love %s"%"王晓静") print("I love %s"%19) f = "刘坦今年 %d 岁了" print(f%19)
#如果需要格式化的信息多个,则用括号括起来就可以了 #以下打印了使用了默认的格式,多余打出好多零 f = "i am %fKG weight ,%fm Heigh" print(f%(75.5,180)) #正确的格式应该为 f = "i am %.2fKG weight ,%.2fm Heigh" print(f%(75.5,180)) #实际需要进行格式化的信息数量必须与百分号后面给出的数据量匹配,否则报错 #如下例子,实际需求要格式化的为2处,但是你给出的数据为三个,则报错 a = "i am %fKG weight ,%fm Heigh" print(f%(75.5,180,10))
# str内置函数
### 查找类函数
- 字符串查找类(顾名思义就是在一串字符中找一下是否包含所想要查的内容),find(查找),index(索引),islower
- find:查找字符串中是否包含一个子串
- index:跟find的唯一区别是index如果找不到会报ValueError而find是返回 -1
- rfind,lfind:从左开始查找或从右开始查找
s = "liuying I Love Wangxiaojing and Zhangxiaojing is bad boy" s1 = "Wangxiaojing" # 返回值表示的是发现这个字符串的第一个位置 s.find(s1) # 返回值为 -1 说明没有找到(这是find的特性) s2 = "xiaoming" s.find(s2)
# 判断类函数
- 此类函数的特点是一般都用is开头,例如islower,isalpha
- isalpha: 判断是否是字母,需要注意的两点:
-此函数默认的前提是字符串至少包含一个字符,如果没有,同样返回False。
-汉字被认为是alpha,所以,此函数不能作为区分英语字母还是汉字的标识,区分中英请使用unicode码
- 注意使用区别,防止被坑
- islower:判断是否是大写小写
s = "asddsdsSSas,da,,sd" s.islower()
# 内容判断类 - startswith/endswith:是否以XXX开头或者结尾 - 检测某个字符串是否以某个子串开头,常用三个函数 - suffix:被检查的,必须有 - start:检查范围的开始范围 - end: 检查范围的结束范围
a = "wangba" b = "ni hao" s = "wangba is nihao" print(s.startswith(a)) print(s.endswith(b))
### 操作类函数 - format:格式化用的 - strip:这个函数主要作用是删除字符串两边的空格,其实这个函数允许你去定义删除字符串两边的哪个字符,只不过如果不指定的话默认是空格。同样还有lstrip和rstrip,此处的l和r分别表示左边右边,即删除字符串左边或右边制定字符,默认空格。需要注意的是,此处的删除不是删除一个是指从头开始符合条件的连续字符。 - strip相似的函数还包括lstrip,rstrip - join: 这个函数是对字符串进行拼接。它需要一个可以迭代的内容作为参数(迭代的概念后面介绍,此处暂时理解成一个列表),功能是把可迭代的字符串拼接在一起,中间使用调用字符串作为分隔符
s = "DDDDDDDnananDDssssD " # 去除字符串两边空格和去除后验证是否真的去除了 print(s.strip()) print(s.strip(),end="-------") #去除字符串两边的字符并验证 print("----------------------------------") print(s.strip("D")) print(s.strip("D"),end="-------")
# join示例 s1 = "%" s2 = "$" s3 = " " s = ["你好","你是谁","你在哪"] print(s1.join(s)) print(s2.join(s)) print(s3.join(s)) print(s)
浙公网安备 33010602011771号