04-python

python函数的定义:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段
python当中函数分为:内置函数,自定义函数
自定义函数:结合自己的业务场景自定义一个函数来实现场景功能 
一个.py文件也叫一个模块
1.自定义函数
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、需求:登录银行系统并显示余额,有两个功能第一个是登录,第二个是登录后显示余额,先登录然后根据登录是否成功然后是否显示余额。
分析思路:如果想查询到余额,前提必须登录,所以现在我们用两个函数来处理,第一个函数实现登录,第二个函数实现余额查询,调用第一个函数得
到的结果给第二个函数,然后第二个函数根据结果进行代码处理。

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={'amdin':123456,'dcs31':654321}
要求如下:
1-1 :从字典中获取用户完成登入,登入时判断用户是否存在,存在直接登入(密码输入错误时提示密码输入错误请重新输入)
1-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'))

 

 

posted @ 2023-03-27 21:04  jormen  阅读(38)  评论(0编辑  收藏  举报