python函数的定义:函数是组织好的,可重复使用的,用来实现单一,或相关联功能
的代码段
python当中函数分为:内置函数,自定义函数
自定义函数:结合自己的业务场景自定义一个函数来实现场景功能
一个.py文件也叫一个模块
- 自定义函数
def dcs31():
print('dcs31 is number one')
第一种调用方法
dcs31() # 运行结果:dcs31 is number one
第二种调用方法
if __name__ == '__main__': #有个调试代码作用 一个.py文件如果自身在运行,那么他的__name__值等于__mian__,就执行下面代码
dcs31()
1.定义一个函数且带单个参数的
举例1
def test01(name):
print('%s去深圳赚钱'%(name))
test01('小张')
小张为实际参数,name是形式参数,实际参数传给形式参数,传入的参数只能是一个,如果大于一个或者不传会报错
2.定义一个函数且带多个参数的
举例2
def test01(name,where):
print('%s去%s赚钱'%(name,where))
test01('小张','深圳')
多个形式参数按照顺序传给形式参数,传入的实际参数不能少于也不能多余形式参数,否则报错
3.定义一个函数且带有默认参数
举例3
def test01(name,where='北京'):
print('%s去%s赚钱' % (name, where))
test01('小张','深圳')
当函数带有默认参数值时,调用的时候可以不给默认值参数,默认参数取默认值
当函数带有默认值参数时,调用的时候可以给默认值参数传入值,输出结果为传入的值,不输出默认值
注意:默认值参数一定要放在后面,否则报错
4.定义一个可变长参数的可变长元组
举例4
def test01(*name):
print(name)
print(type(name))
test01('dcs31','baoan31')
形参中的*会将实参全部接收,然后存储以元组的形式,再把元组赋值给*后面的参数,注意:参数可以为空
举例4-1
user_name=('zhangsan','lisi','wanger')
def test01(*name):
print(name)
print(type(name))
test01(*user_name)
传入的实际参数是一个序列时需要加*号
举例4-2
user_name=['北京','深圳']
def test01(name,*where,age=25):
print(name)
print(where)
print(age)
test01('小程',*user_name,age=30)
当有位置参数、默认参数、可变长元组时,去调用的时候位置参数一定要在可变长参数前面,默认值可以不传
当自定义函数同时有位置参数和默认值参数和可变长元组时,同时传参的时候默认值参数需要写参数名=值
5.定义一个可变长参数中的可变长字典
dict1={'name':'xiaoliu','age':19}
dict2={'score':89,'mathroe':90}
def test01(**num):
print(num)
test01(**dict1,**dict2)
传入多个字典使可变长字典合并为一个字典
def test01(**num):
print(num)
test01(name='xiaohong',age=18,score=87)
可变长参数字典传入的实际参数可以是一个键值对的形式
dict1={'name':'xiaoliu','age':19}
def test01(*name,**num):
print(num)
print(name)
test01('zhangsan','lisi',**dict1)
可变长元组和可变长字典同时出现,可变长字典需要放在可变长元组后面
=================================================================
6.函数中的变量
6-1、函数中也可以设置变量,在函数中定义变量被称之为局部变量,局部变量只是定义的函数内部有效
6-2、在函数体之外定义变量。我们称之为为全局变量
举例
num1=200 #全局变量
def test1():
num1=300 #局部变量
print(num1+100)
test1() #打印的是局部变量的num1的值 400
print(num1) #打印全局的num1 200
当函数内部变量名是在以一次出现且出现在等号前面,不论全局变量是否用到该变量名,函数都使用函数中的局部变量
举例2
num1=200
def test1():
sum1=num1+100
print(sum1)
test1()
当函数内部变量名如果是在等号后面,且第一次出现,则这里引用全局变量
举例3
num1=200
def test1():
global num1
num1=300
sum1=num1+100
print(sum1)
test1() #结果:400
print(num1) #结果:300
在函数中将某个变量定义为全局变量时需要使用关键字global 声明成一个全局变量,原有的全局变量的值会被覆盖
7.python中return 返回值
def test01():
num1=200
score=num1/100
test01() #空没有值
print(test01()) #None
def test01():
num1 = 200
score=num1/100
# print(score)
return score #将score的结果返回给到函数调用处,谁调用了这个函数就能拿到score的值
# print(score) #一旦函数碰到return就是直接把结果返回去,return后面的代码不会被执行
test01()
print(test01()) #运行结果:2.0
8.函数的传递
编写一个求平均分的函数,然后根据平均分判断是否是一个优秀学生
def avg():
num1=600
score=num1/6
return score
# print(score)
avg()
def is_good_student():
values=avg() #赋值给到values变量
# print(values)
if values>80:
print('优秀学生')
else:
print('不是优秀学生')
is_good_student() #第一种调用
if __name__ == '__main__': #第二种调用
avg()
is_good_student()
1、需求:登录银行系统并显示余额,有两个功能第一个是登录,第二个是登录后显示余额,先登录然后根据登录是否成功然后是否显示余额。
分析思路:如果想查询到余额,前提必须登录,所以现在我们用两个函数来处理,第一个函数实现登录,第二个函数实现余额查询,调用第一个函数得
到的结果给第二个函数,然后第二个函数根据结果进行代码处理。
2、先定义一个字典存放的用户名和密码,dict1={'amdin':123456,'dcs31':654321}
要求如下:
1-1 :从字典中获取用户完成登入,登入时判断用户是否存在,存在直接登入(密码输入错误时提示密码输入错误请重新输入)
1-2:如果输入的登入用户判断不存在字典中,则调用注册方法,完成注册(注册时输入密码需要确认两次是一致,否则提示两次输入密码不一致请重新输入)
注册成功后写入字典中
def login():
name=input('请输入您的账号:')
if name=='admin':
pwd=input('请输入您的密码:')
if pwd=='123456':
return '登录成功'
else:
return '密码错误,登录失败'
else:
return '用户名错误请重新输入!'
def test01():
values=login()
if values=='登录成功':
print('您的余数为100万')
elif values=='密码错误,登录失败':
print('密码错误请重新输入!')
else:
print('用户名错误请重新输入')
if __name__ == '__main__':
test01()
2.
dict1={'admin':'123456','dcs31':'654321'}
定义登录函数
def login():
username=input('请输入您的用户名:')
if dict1.__contains__(username): #判断输入用户名是否在列表中
pwd=input('请输入您的密码:')
if pwd==dict1[username]:
print('登录成功')
else:
print('您输入的密码有误请重新输入!')
else:
print('您输入的账号不存在请注册用户名!')
register()
def register():
newusername=input('请输入您要注册的用户名:')
if dict1.__contains__(newusername):
print('您输入的用户名已存在请重新输入!')
register()
else:
newpwd1=input('请输入您的密码:')
newpwd2=input('请再次输入密码:')
if newpwd1==newpwd2:
print('注册成功')
dict1.setdefault(newusername,newpwd2)
print(dict1)
else:
print('两次输入的密码不一致请重新输入!')
if __name__ == '__main__':
login()
3.用递归的方法求出n阶乘? 列如:4的阶乘为4*3*2*1(用递归函数:在函数的内部调用函数本身)
def func(n):
if n==0 or n==1:
return 1
else:
return n*func(n-1) #调用函数本身
print(func(5))
9.字符串格式化输出函数format():是一种格式化输出字符串函数,该函数增强了字符串格式化的功能
基本语法:通过{}来代替以前%,{}代表占位符
9-1:举例
name='lisi'
where='深圳'
print('{}去{}'.format(name,where)) #不设置指定位置,按默认顺序
9-2:举例
name='lisi'
where='深圳'
print('{1}去{0}'.format(name,where)) #可以设置指定索引位置输出
print('{0}{1}去{1}{0}'.format(name,where)) #format函数里面的参数可以通过索引重复取值,运行结果:lisi深圳去深圳lisi
9-3:举例
name='lisi'
where='深圳'
print('{0}去{1}'.format(where,name,'age')) #fromat函数里面的参数个数可以大于{}占位符个数,取值按照占位符的索引取
9-4:举例
a='{name}去{where}'.format(name='lisi',where='深圳') #设置参数输出
print(a)
9-5:举例
list1=['lisi','深圳','广州']
a=('{0[0]}去{0[2]}'.format(list1)) #大括号里面的0代表的列表,中括号里面的0和1代表是列表元素对应的索引
print(a) #lisi去广州
9-6:举例 占位符{}里面必须要丢入参数不然报错
list1=['lisi','深圳','广州']
a=('{0}去{0}'.format(list1)) #大括号里面的0代表的列表,中括号里面的0和1代表是列表元素对应的索引
print(a) #运行结果:['lisi', '深圳', '广州']去['lisi', '深圳', '广州']
9-7:举例 同时可以对两个列表进行格式化输出
list1=['北京','深圳','广州']
list2=['lisi','zhangsan']
a=('{1[0]}去{0[1]}'.format(list2,list1)) #输出结果:北京去zhangsan
print(a)
9-8:举例 对字典进行格式化输出
dict1={'name':'lisi','where':'深圳'}
a=('{0[name]}去{0[where]}'.format(dict1)) #0代表就是字典本身,在通过dict1[name]取出该键的值
print(a) #输出结果:lisi去深圳
9-9:举例 对多个字典机型格式化输出
dict1={'name':'lisi','where':'深圳'}
dict2={'name':'zhangsan','where':'广州'}
a=('{0[name]}去{1[where]}'.format(dict1,dict2))
print(a) #输出结果:lisi去广州
10.zip函数:用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组
然后返回有这些元组组成的列表,如果各个迭代器元素个数不一致,则返回列表长度与最短的对象相同
list1=['北京','深圳','广州']
list2=['lisi','zhangsan']
test1=zip(list1,list2)
test1=list(test1) #转化列表
print(test1) #结果:[('北京', 'lisi'), ('深圳', 'zhangsan')]
dict1=dict(test1) #转化为字典
print(dict1) #{'北京': 'lisi', '深圳': 'zhangsan'}
zip方法在python2和python3的不同点:python3中为减少内存,zip()返回是一个对象,需要展示列表或者字典需要手动转化
11、python中open函数和with open函数
11-1 读模式:r
file1=open(r'D:\python\dcs31\test','r',encoding='utf8')
print(file1.read()) #通过file1对象调用read方法读取文件所有内容且字符串形式返回
print(file1.readline()) #通过file1对象调用readline方法读取文件首行内容且字符串形式返回
print(file1.readlines()) #通过file1对象调用readlines方法读取文件首行内容且列表形式返回
a=file1.readlines()
print(a) #['duoceshi\n', 'baoan31']
print(a[2]) #取列表的索引值 输出结果:hello
print(a[1:]) #切片取列表第二个元素后的所有 输出结果:['baoan31\n', 'hello\n']
for i in a[1:]:
print(i,end='') #baoan31 hello
11-2:写的模式 :w
file1=open(r'D:\python\dcs31\test','w',encoding='utf8')
print(file1.write('1宝安31班')) #将内容写入到文件里面且会覆盖原有的内容 返回的是字符的个数
print(file1.write('1')) #write接受的参数必须是str,如果是int需要加引号
file1.close()
11-3: 写的模式(追加):a
file1=open(r'D:\python\dcs31\test','a',encoding='utf8')
print(file1.write('hello')) #在文件内容末尾追加
print(file1.write('\nhello')) #再追加的内容前换行
print(file1.writelines('username')) #在追加内容返回为一个对象且在内容末尾追加
file1.close()
11-4:with open 函数,用with open语句好处,就是到达语句末尾时,会自动关闭文件,即便出现异常
with open(r'D:\python\dcs31\test','r',encoding='utf8') as f: #取别名为f
# print(f.read())
# print(f.readline())
with open(r'D:\python\dcs31\test', 'a', encoding='utf8') as f:
print(f.write('duoceshi31'))
标签:__,name,04,python,print,test01,def,函数 From: https://www.cnblogs.com/jjm414/p/17262880.html