重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Python 中用if语句进行条件判断;与Excel 中的if作用有些类似,具体的语句如下:
专注于为中小企业提供成都网站设计、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业甘谷免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
if 条件:
结果
else:
结果
下面我们来举例进行说明:
例1:年龄=18岁,输出“成年了”;否则输出“未成年”
age = 16
if age = 18:
print("成年了")
else:
print("未成年")
当存在两个以上条件时,可在if条件判断后,增加 elif(else if 的缩写)继续进行分支条件判断。
说明:分支条件判断的结果输出,当满足第一个条件时既停止后续判断并返回第一个结果;当满足第二个条件时既停止后续判断并返回第二个结果;以此类推,如果全部条件判断均不满足,则返回else的结果。
例2:年龄18岁,“未成年”; 18岁 =年龄40岁,“青年”; 40岁 =年龄60岁,“中年”;年龄=60岁,“老年”
age = 25
if age = 60:
print("老年")
elif age = 40:
print("中年")
elif age =18:
print("青年")
else:
print("未成年")
注:第二个条件中 可以直接写 “age =40”; 无需写成 40 =age60;因为当判断大盘第二个条件时,已经不满足第一个条件、即age !=60(age 60),所以“60”部分可省略。第三个条件同理
条件分支的简单表达:三元表达式
我们将例1(:年龄=18岁,输出“成年了”;否则输出“未成年”)改写为“三元表达式”
age = 59
result ="成年" if age =18 else "未成年"
print(result)
注:仅有两个条件判断时,可使用三元表达式进行简写
例3:国籍=china ,输出“中国人”;否则输出“外国人”
nationality = "England"
result = "中国人" if nationality == "china" else "外国人"
print(result)
注:一个“=”代表赋值,“==”代表等于
例4:通过身份证号判断性别(身份证号17位单号为男性,双号为女性)
id = "2308__________2642"
result = "女" if int(id[17]) % 2 == 0 else "男"
print(result)
注:id的类型为字符串,需要通过“int()”函数将其转换为整数; ”%”代表取余数,
“XX % 2 ==0 ” 代表XX除2余数为0即偶数.
python 的函数参数类型分为4种:
1.位置参数:调用函数时根据函数定义的参数位置来传递参数,位置参数也可以叫做必要参数,函数调用时必须要传的参数。
当参数满足函数必要参数传参的条件,函数能够正常执行:
add(1,2) #两个参数的顺序必须一一对应,且少一个参数都不可以
当我们运行上面的程序,输出:
当函数需要两个必要参数,但是调用函数只给了一个参数时,程序会抛出异常
add(1)
当我们运行上面的程序,输出:
当函数需要两个必要参数,但是调用函数只给了三个参数时,程序会抛出异常
add(1,2,3)
当我们运行上面的程序,输出
2.关键字参数:用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。
add(1,2) # 这种方式传参,必须按顺序传参:x对应1,y对应:2
add(y=2,x=1) #以关健字方式传入参数(可以不按顺序)
正确的调用方式
add(x=1, y=2)
add(y=2, x=1)
add(1, y=2)
以上调用方式都是允许的,能够正常执行
错误的调用方式
add(x=1, 2)
add(y=2, 1)
以上调用都会抛出SyntaxError 异常
上面例子可以看出:有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的
3.默认参数:用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值,所有位置参数必须出现在默认参数前,包括函数定义和调用,有多个默认参数时,调用的时候,既可以按顺序提供默认参数,也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上
默认参数的函数定义
上面示例第一个是正确的定义位置参数的方式,第二个是错误的,因为位置参数在前,默认参数在后
def add1(x=1,y) 的定义会抛出如下异常
默认参数的函数调用
注意:定义默认参数默认参数最好不要定义为可变对象,容易掉坑
不可变对象:该对象所指向的内存中的值不能被改变,int,string,float,tuple
可变对象,该对象所指向的内存中的值可以被改变,dict,list
这里只要理解一下这个概念就行或者自行百度,后续会写相关的专题文章讲解
举一个简单示例
4.可变参数区别:定义函数时,有时候我们不确定调用的时候会多少个参数,j就可以使用可变参数
可变参数主要有两类:
*args: (positional argument) 允许任意数量的可选位置参数(参数),将被分配给一个元组, 参数名前带*,args只是约定俗成的变量名,可以替换其他名称
**kwargs:(keyword argument) 允许任意数量的可选关键字参数,,将被分配给一个字典,参数名前带**,kwargs只是约定俗成的变量名,可以替换其他名称
*args 的用法
args 是用来传递一个非键值对的可变数量的参数列表给函数
语法是使用 符号的数量可变的参数; 按照惯例,通常是使用arg这个单词,args相当于一个变量名,可以自己定义的
在上面的程序中,我们使用* args作为一个可变长度参数列表传递给add()函数。 在函数中,我们有一个循环实现传递的参数计算和输出结果。
还可以直接传递列表或者数组的方式传递参数,以数组或者列表方式传递参数名前面加(*) 号
理解* * kwargs
**kwargs 允许你将不定长度的键值对, 作为参数传递给函数,这些关键字参数在函数内部自动组装为一个dict
下篇详细讲解 *args, **kwargs 的参数传递和使用敬请关注
1.把range全部换成xrange
2.生成器,如 list=(item for item in fp)
3.利用psyco库,提高函数和类的运行效率。
4.字符串拼接:尽量少用“+”的方式,而采用''.join ,还有"%s"%i这样赋值的手段
5.函数的开销很大。尽量把循环放在函数内进行。而不要让每次迭代都调用函数。
6.“前提工作”先做好,比如该赋值,该拼接的,然后再引入到函数中,或者进行下面的循环。
7.尽量使用内置方法,因为内置的是C写的,效率肯定高很多
8.每当要对序列中的内容进行循环处理时,就应当尝试用列表解析来代替它,如:[i for i in xrang(10) if i%2==0]
9.学会使用itertools模块。当python中添加了迭代器后,就为常见模式提供了一个新的模块,因为它是以C语言编写,所以提供了最高效的迭代器。
--多记录一些。列表,字符串,字典,xrange,类文件对象,这些都是可迭代对象,换句话说,都可以直接用在for循环中进行迭代,如for item in open('1.txt')
--直接使用速度会快。另外,我对比了itertools里工具和xrange,比如都循环100000次打印数字,使用islice(count(),100000)均要比xrange(100000)快
--而xrange还要比range快。
10.用列表解析取代for循环。列表解析的效率等于或高于map。
11.垃圾回收机制,会对列表的操作有重大影响,如列表的append,或者列表解析。import gc,然后在数据载入模块前gc.disable(),结束后再gc.enable()。
一、函数的定义
函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需要调用函数名即可
特性:
减少重复代码
使程序变得可扩展
使程序变得易维护
二、函数的参数
2.1、形参和实参数
形参,调用时才会存在的值
实惨,实际存在的值
2.2、默认参数
定义:当不输入参数值会有一个默认的值,默认参数要放到最后
2.3、 关键参数
定义: 正常情况下,给函数传参数要安装顺序,不想按顺序可以用关键参数,只需要指定参数名即可,(指定了参数名的就叫关键参数),但是要求是关键参数必须放在位置参数(以位置顺序确定对应的参数)之后
2.4、非固定参数
定义: 如你的函数在传入参数时不确定需要传入多少个参数,就可以使用非固定参数
# 通过元组形式传递
# 通过列表形式传递
# 字典形式(通过k,value的方式传递)
# 通过变量的方式传递
三、函数的返回值
作用:
返回函数执行结果,如果没有设置,默认返回None
终止函数运行,函数遇到return终止函数
四、变量的作用域
全局变量和局部变量
在函数中定义的变量叫局部变量,在程序中一开始定义的变量叫全局变量
全局变量作用域整个程序,局部变量作用域是定义该变量的函数
当全局变量与局部变量同名是,在定义局部变量的函数内,局部变量起作用,其他地方全局变量起作用
同级的局部变量不能互相调用
想要函数里边的变量设置成全局变量,可用global进行设置
五、特殊函数
5.1、嵌套函数
定义: 嵌套函数顾名思义就是在函数里边再嵌套一层函数
提示 在嵌套函数里边调用变量是从里往外依次调用,意思就是如果需要调用的变量在当前层没有就会去外层去调用,依次内推
匿名函数
基于Lambda定义的函数格式为: lambda 参数:函数体
参数,支持任意参数。
匿名函数适用于简单的业务处理,可以快速并简单的创建函数。
# 与三元运算结合
5.3、高阶函数
定义:变量可以指向函数,函数的参数可以接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数称之为高阶函数 只需要满足一下任意一个条件,即是高阶函数
接收一个或多个函数作为输入
return返回另一个函数
5.4、递归函数
定义:一个函数可以调用其他函数,如果一个函数调用自己本身,这个函数就称为递归函数
在默认情况下Python最多能递归1000次,(这样设计师是为了防止被内存被撑死)可以通过sys.setrecursionlimit(1500)进行修改
递归实现过程是先一层一层的进,然后在一层一层的出来
必须有一个明确的条件结束,要不然就是一个死循环了
每次进入更深层次,问题规模都应该有所减少
递归执行效率不高,递归层次过多会导致站溢出
# 计算4的阶乘 4x3x2x1
# 打印数字从1-100
5.5、闭包现象
定义:内层函数调用外层函数的变量,并且内存函数被返回到外边去了
闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域
其实各个语言的基础都是相通的。
words = ['soften', 'civilize', 'personalization', 'bakery', strain', 'glimpse', 'royals']
for word in words:
if word == 'civilize':
print(word.upper()) #全部大写输出
else:
print(word.title()) #首字母大写输出
result:
Soften
CIVILIZE
Personalization
Bakery
Strain
Glimpse
Royals
*
条件语句包括:!=\=\=\\ #这点python还是做的很好哈。
chl = 21
fsy = 32
chl =20 and fsy =31 #检查两个条件语句,使用关键词and result:False
(chl =20) and (fsy =31) #也可将每个测试放在一对括号内
chl =20 or fay =31 #使用or result:True
*
word = ['bride', 'castle', 'masterpieces', 'mystery', 'tragedy', 'bakery', 'strain', 'glimpse']
'castle' in word #使用关键词in让python检查列表中是否有'castle'
words = ['emperor', 'castle', 'royal', 'diplomat', 'bakery', 'strain', 'glimpse']
chl = 'emperors'
if chl not in words: #if not in
print("The word is not in words list!")
*
age = 12
if age = 4:
print("I like dessert and trade!")
elif age = 18: #python这点不一样哈,有个elif,可以有若干个elif语句
print("I like diplomat and dumpling!")
else:
print("I like nobility and sketch!")
result:
I like diplimat and dumpling!
*
age = 12
if age = 4:
price = 0
elif age = 18:
price = 10
else:
price = 20
print("You admission cost is $ " + str(price) +"!") #price要str函数告诉python输出字符
**当其中一个if语句通过测试,python会跳过其他的if语句测试。
eg:寻找两个列表共同的元素(交集)
chls = ['emperor', 'nobility', 'bakery', 'sauce', 'royal']
fsys = ['emperor', 'Spring Festival', 'approaching', 'nobility']
for chl in chls:
if chl in fsys:
print("We can discover " + chl +"!")
else:
print("Oh my god! The Spring Festival is approaching, prepare " + chl + "!")
result:
We can discover emperor!
Oh my god! The Spring Festival is approaching, prepare nobility!
Oh my god! The Spring Festival is approaching, prepare bakery!
Oh my god! The Spring Festival is approaching, prepare sauce!
Oh my god! The Spring Festival is approaching, prepare royal!