函数学习
range函数
•生成有序的序列
•生成数字队列可以定制
# range函数案例1
# 生成一个从1到10的数字序列
# range的生成序列的两个面数字是左包括,右不包括(如下所示只包括1不包括10)
dig_list = range (1,10)
for dig in dig_list:
print (dig)
1
2
3
4
5
6
7
8
9
#range案例2
#打印1到9的数字序列
for dig in range (1,10):
print (dig)
1
2
3
4
5
6
7
8
9
函数
•函数是代码的一种组织形式
•函数能完成一项特地的工作,一般 一个函数值完成一项工作
•有些语言中,分两个概念 :函数和过程 ,有返回结果的叫函数,无返回结果的叫做过程,在python中不加以区分
•函数的使用:
◾函数需要提前定义
◾使用函数,俗称 调用
•定义一个函数
◾只是定义函数的话是不会被执行的,只有调用时才执行
◾1,def关键字,后跟一个空格
◾2,函数名字,自己定义,起名需要遵循便令命名规则,约定俗称,大驼峰命名只给类用
◾3,后面括号和冒号不能省略,括号内可以由参数
◾4,函数内所有代码缩进
参数
str
list,tupe,set,map
#定义函数案例
#def 空格 括号
def hanshu1():
print ("在同一个缩进内的才是函数内容")
print("我是一个函数")
print ("因为不在一个缩进内所以不是函数")
因为不在一个缩进内所以不是函数
#函数的调用
#直接写出函数的名字,后面的小括号不能省略,括号内的内容根据情况(定义函数时是否输入东西就是参数)
hanshu1()
在同一个缩进内的才是函数内容
我是一个函数
函数的参数和返回值
•参数:负责给函数传递一些必要的数据或者信息◾形参(形式参数):在函数定义的时候用到的参数,没有具体值,只是一个占位符好
◾实参(实际参数):在调用函数的时候输入的值
•返回值; 调用函数的时候的一个执行结果◾使用 return 返回结果
◾如果没有值需要返回,推荐使用 return None 表示函数结束
◾函数一旦执行return,则函数立即结束
◾如果函数没有return 关键字,则返回默认的None
# 形参和实参
#参数una只是一个符号
#调用得时候用另一个
def hanshu2 (una):
print ("{},你在干嘛啊?".format(una))
print ("{},我很想你。".format(una))
u = "雨"
#调用函数,需要把u作为实参传入
hanshu2(u)
雨,你在干嘛啊?
雨,我很想你。
a = "雨雨"
hanshu2(a)
雨雨,你在干嘛啊?
雨雨,我很想你。
#返回
def hello (una):
print ("{0},你在干嘛啊?".format(una))
print ("{},我很想你。".format(una))
return None
u = "雨雨"
#调用函数,需要把u作为实参传入
hello(u)
雨雨,你在干嘛啊?
雨雨,我很想你。
u = hello("小雨")
print (u)
小雨,你在干嘛啊?
小雨,我很想你。
None
# help 负责随时为你提供帮助
help (print)
Help on built-in function print in module builtins:
print(…)
print(value, …, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
#使用函数打印九九乘法表
def jiujiu():
for o in range (1,10):#控制外循环,从1到9
for i in range (1,o + 1):#内循环,每次从第一个数字开始,打印到跟行数相同的数量
print (o * i,end=" ") #行是o 列是i
print ()
return None
jiujiu()
jiujiu()
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
#函数嵌套使用
def printline(line_num):
'''
line_num:代表行号
'''
for i in range(1, line_num + 1):
print (line_num * i,end = " ")
print ()
def jiujiu():
for o in range (1,10):
printline(o)
return None
jiujiu()
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
参数详解
•参数分类
◾普通参数/位置参数
◾默认参数
◾关键字参数
◾收集参数
# 普通参数案例
def a(A,B,C,D):
print (A + C)
return None
a(1,2,3,4)
#----------------------------------
def a(A,B,C,D):
print (A + C)
return None
a2(1,2,3,)#普通参数也叫位置参数因下面参数和上面未对应上所以报错
4
NameError Traceback (most recent call last)
in
9 print (A + C)
10 return None
—> 11 a2(1,2,3,)#普通参数也叫位置参数因下面参数和上面未对应上所以报错
12
NameError: name ‘a2’ is not defined
# 默认参数案例
def default_para(A,B,C=100):
print (A + B)
print (C)#c就是默认参数
return None
default_para(100,200)
300
100
# 关键字参数案例
def keys_para(A,B,C):
print (A + B)
print (C)
return None
keys_para(A=1,B=2,C=10)
keys_para(C=10,B=2,A=1)#调用参数没有顺序的影响
3
10
3
10
STR字符串
•str
•转义字符
•格式化
•内建函数
字符串
•表示文字信息
•用单引号,双引号,三引号括起来
s = "i love una"
print (s)
i love una
转义字符
•用一个特色的方法表示出一系列不方便写出的内容,比如回车键,换行符,退格键等
•借助反斜杠字符,一旦字符串中出现反斜杠,则反斜杠后面一个或者几个字符表示已经不是原来的意思了,进行了转义
•在字符串中,一旦出现反斜杠就要加倍小心,可能有转义字符出现
•不同系统对 换行操作有不同的表示
◾windows: \n
◾linux: \r\n
#转义字符案例1
#想表达 Let's Go
#使用转义字符
a = 'Let\'s Go'
print (a)
# 使用单双引号嵌套
b = "Let's Go"
print (b)
#表示斜杠\
#比如 表示: C:\etc\mnt
c = "C:\\etc\\mnt"
print (c)
#回车换行
#效果如下:
# I
# love
# una
d = "\n I \n love \n una"
print (d)
#windows下 \r\n效果一样
d = "I \r\nlove\r\nuna"
print (d)
Let’s Go
Let’s Go
C:\etc\mnt
I
love
una
I
love
una
•转义字符:\ (反斜杠-可以打印出一个反斜杠)
•转义字符:’ (单引号-可以打印出一个单引号)
•转义字符:" (双引号-可以打印出一个双引号)
•转义字符:\a (响铃-用于触发系统蜂鸣器)
•转义字符:\n (换行符-将光标移动到下一行的开头)
•转义字符:\t (水平制表符-将光标向右移动一个制表符位)
格式化
•把字符串按照一定格式打印出来或者填充
•格式化分类◾传统格式化
◾format
# 填充
a = "i love una"
print (a)
a = "i love yangyu"
print (a)
a = "i love yuyu"
print (a)
i love una
i love yangyu
i love yuyu
字符串的传统格式化方法
•使用%进行格式化
•%(百分号)也叫占位符◾%s:字符串◦%r :字符串,但是是使用repr而不是str
◦%c : 整数转换为单个字符
◦%d : 十进制整数
◦%u : 无符号整数
◦%o : 表示八进制
◦%x : 十六进制,字母为小写(x为小写)
◦%X : 十六进制,字母为小写(X为小写)
◦%e : 浮点数(e为小写),例如2.87e+12
◦%E : 浮点数(E为小写),例如2.87E+12
◦%f,%F : 浮点数十进制形式
◦%g,%G : 十进制形式浮点数或者指数浮点数自动转换
◦格式符前边出现"-“表示左对齐
◦格式符前边出现”+"表示右对齐
◦0位数不足用”0“补齐
◦width表示宽度
◦pricision 精度
# %s 表示简单得字符串
# 占位符可以单独使用
s = "i love %s"
print (s)
s = "i love %s"
print (s%"una")#想用某个东西替换占位符
print (s%"小雨")
i love %s
i love una
i love 小雨
print("i love %s"%"雨雨")
#占位符一般只能被同类型替换,或者替换类型能被转换成占位符的类型
print("i love %s"%520)
i love 雨雨
i love 520
a = "gemoumou同学现在%d斤了,感觉瘦了不少"
print (a%120)
#以下打印会出错
print (a%"120")
gemoumou同学现在120斤了,感觉瘦了不少
TypeError Traceback (most recent call last)
in
2 print (a%120)
3 #以下打印会出错
----> 4 print (a%“120”)
TypeError: %d format: a number is required, not str
b = "i am %fKG weight,%fM height"
print (b)
#如果需要格式化的信息多个,则用括号括起来
print (b%(60,175))
#实际需要进行格式化的信息数量必须与百分号后面的出的数据量匹配,否则报错
# 如下面例子,实际需要格式化的为4个地方,但是给出的数据为三个,则报错
b = "i am %.2fKG weight,%.2fM height" #%.2的意思就是小数点后面几位的意思
print (b%(60,175))
i am %fKG weight,%fM height
i am 60.000000KG weight,175.000000M height
i am 60.00KG weight,175.00M height
format格式化
•使用函数形式进行格式化,代替以前的百分号
#不用指定位置,按顺序读取
#方式1
s = "{} {}!"
print (s.format("hello","una"))
#方式2
s = "{} {}!".format("hello","una")
print (s)
#设置指定位置
s = "{0} {1}".format("hello","una")
print (s)
s = "{1} {1}".format("hello","una")
print (s)
s = "i love {1} and {0} i love me".format("雨雨","una")
print (s)
#使用命名参数
s = "我是{name1},我最喜欢{name2}"
s = s.format(name1 = "gpc",name2 = "una")
print (s)
hello una!
hello una!
hello una
una una
i love una and 雨雨 i love me
我是gpc,我最喜欢una
#通过字典设置参数,需要解包
s = "我是{a1},我最喜欢{a2},我们要{a3}"
s_zidian = {"a1":"gpc",\
"a2":"una",\
"a3":"幸福一辈子"}
s = s.format(**s_zidian)
print (s)
我是gpc,我最喜欢una,我们要幸福一辈子
#对数字的格式化需要用到
s = "gpc is {:.2f}m heigh,{:.2f}kg weight"
print (s.format(1.73, 60.00))
#使用大括号{}来转移大括号
s = "format 函数是使用{}来进行占位"
print (s)
gpc is 1.73m heigh,60.00kg weight
format 函数是使用{}来进行占位
str 内置函数
•很多语言字符串使用 string表示,但是python中用str表示字符串
•字符串查找类, find index,islower
•find :查找字符串中是否包含一个子串
•index : 跟find的唯一区别是index如果找不到会异常报错
•rfind ,lfind : 从左开始查找或者从右开始查找
help (str.find)
Help on method_descriptor:
find(…)
S.find(sub[, start[, end]]) -> int
Return the lowest index in S where substring sub is found,
such that sub is contained within S[start:end]. Optional
arguments start and end are interpreted as in slice notation.
Return -1 on failure.
a = "ge peng cheng love yang yu"
# 返回第一次发现这个字符串的位置
s1 = "yang yu"
s.find (s1)
#返回-1表示没找到
s2 = "una"
s.find (s2)
-1
s.index (s1)
19
#index 会报错或者引发异常
s.index (s2)
ValueError Traceback (most recent call last)
in
----> 1 s.index (s2)
ValueError: substring not found
#使用的时候可以使用区间
a = "ge peng cheng love yang yu and yu yu"
s1 = "yu"
#从下表20开始查找,看能否找到
a.find (s1,24)
24
判断类函数
•此类函数的特点一般使用is开头,比如 islower
•isalpha:判断是否是字母,需要注意两点:
◾此函数默认的前提是字符串至少包含一个字符,如果没有,同样返回false
◾汉字被认为是 alpha,所以此函数不能作为区分英语字母还是汉字表示,区分中英文请使用unicode码
◾注意使用区别,防止被坑
•isdigit,isnumeric,isdecimal 三个判断数字的函数
◾此类函数不建议使用,在后期爬虫中,判断是否是数字采用正则表达式的方式
# 以下三个都不是,因为有除了字母以外的空格等
s1 = "我对着天空发誓,gpc深深爱着yy"
s2 = "bengboerba is friend of baboerbeng"
s3 = "www.gpc.com is the 1.txt"
print (s1.isalpha())
print (s2.isalpha())
print (s3.isalpha())
False
False
False
aa = "一二三四"
print (aa.isdigit())
print (aa.isnumeric())
print (aa.isdecimal())
False
True
False
内容判断类
•startswith/endswith : 是否以xxx开头或者结尾
◾检测某个字符串是否以某个子串开头,常用三个参数
◾suffix:被检查的字符串,必须有
◾start : 检查范围的开始
◾end : 检查范围的结尾
•isupper/slower:判断字符串是否是大写或者小写
gpc = "ge peng cheng"
yy = "yang yu"
l = "ge peng cheng love yang yu"
print (gpc.startswith(gpc))
print (yy.endswith(yy))
True
True
#判断下列字符中是否全是小写
# s1 s2 包含空格,但空格不影响结果
s1 = "ge peng cheng love yang yu"
s2 = "Ge Peng Cheng love Yang Yu"
s3 = "gepengchengloveyangyu"
s4 = "葛爱杨"
print (s1.islower())
print (s2.islower())
print (s3.islower())
#汉字字符串中无大小写区分
print (s4.islower())
print (s4.isupper())
True
False
True
False
False
操作类函数
•format : 格式化用的
•strip : 用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。◾lstrip rstrip
•join : 对字符串进行拼接(是吧可迭代的字符串拼接在一起,中间使用调用字符串作为分隔符)
l = " ge peng cheng love yang yu "
# strip 删除末尾空格或者换行符
print (l.strip())
print (l)
#join案例
s1 = "!!!!!"
s2 = "________"
s3 = " "
ss= ["ge pengcheng","yangyu","una","gpc"]
print (s1.join(ss))
print (s2.join(ss))
print (s3.join(ss))
ge pengcheng!!!yangyu!!!una!!!gpc
ge pengcheng________yangyu________una________gpc
ge pengcheng yangyu una gpc