python 全栈开发,Day9(函数的初始,返回值,传参,三元运算)
一、函数的初始
比如python没有len()方法,如何求字符串的长度
使用for循环
1 2 3 4 5 | s = 'fdshfeigjoglfkldsja' count = 0 for i in s: count + = 1 print (count) |
执行输出:
19
列表呢?
1 2 3 4 5 | li = [ 1 , 2 , 3 , 'a' , 'b' , 'c' , 'ask' ] count = 0 for i in li: count + = 1 print (count) |
执行输出:
7
如果是字典呢?
再把上面的代码贴一遍?
以上可以看出2点
1.重复代码多
2.可读性差
写代码,一切以精简为主,避免重复代码。
针对这种情况,出现了函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数的产生:
函数就是封装一个功能的代码片段。
1 2 3 4 5 6 7 8 9 10 | def my_len(): #def 关键字 定义一个函数 #my_len 函数名的书写规则与变量一样。 #def 与函数名中间一个空格 #函数名(): 加上冒号(将函数名与函数体隔开),括号是用来传参的。 #函数体 就是函数里面的逻辑代码 count = 0 for j in li: count + = 1 print (count) |
以上就是一个函数
代码是从上至下执行的,执行到def my_len() 时
将my_len这个变量名加载到临时内存中,它不执行。
函数如何执行呢?
函数的执行:函数名 + ()
1 2 | #执行函数 my_len() |
当见到my_len()时,只有见到这个括号(),程序会根据函数名从内存中找到函数体,然后执行它
没有括号,它是不会执行的。
二、函数返回值
写函数,不要在函数中写print()
函数是以功能为导向的,除非测试的时候,才可以写print()
1.在函数中,遇到return结束函数。
1 2 3 4 5 | def fun(): print ( 111 ) return print ( 444 ) fun() |
执行输出:
111
2.将值返回给函数的调用者。
1 2 3 4 | def fun(): a = 134 return a print (fun()) |
执行输出:
123
1.无 return
1 2 3 | def fun(): pass print (fun()) |
执行输出:
None
2.return None (没有意义)
1 2 3 | def fun(): return None print (fun()) |
执行输出:
None
3.return 1个值 该值是什么,就直接返回给函数的调用者,函数名()
1 2 3 | def fun(): return [ 1 , 2 , 3 ] print (fun()) |
执行输出:
[1, 2, 3]
4.return 多个值 将多个值放到一个元组里,返回给函数的调用者。
1 2 3 | def fun(): return 1 , 2 ,[ 33 , 44 ], 'abc' print (fun()) |
执行输出:
(1, 2, [33, 44], 'abc')
1 2 3 4 5 6 7 | li = [ 1 , 2 , 3 , 'a' , 'b' , 'c' , 'ask' ] def my_len(): count = 0 for j in li: count + = 1 return count print (my_len()) |
执行输出:
7
查看len方法的源码
1 2 3 | def len ( * args, * * kwargs): # real signature unknown """ Return the number of items in a container. """ pass |
pass表示使用C写的
发现my_len()和len()方法,有些类似了。能返回变量的长度了,但是和len()有些区别。len可以传参数,比如len('123')
三、函数的传参
1 2 3 4 5 6 7 8 9 | def my_len(l): # l 形式参数,形参 print (l) #实际对应就是a count = 0 for j in l: count + = 1 return count a = 'fdsaf' print (my_len(a)) #括号里面的是实际参数,实参 |
执行输出:
fdsaf
5
实参角度:
1.位置传参。按顺序,一一对应。
1 2 3 4 5 | def func(a,b,c): print (a) print (b) print (c) func( 'fdsafdas' , 3 , 4 ) |
执行输出:
fdsafdas
3
4
如果少一个参数呢?
1 2 3 4 5 | def func(a,b,c): print (a) print (b) print (c) func( 3 , 4 ) |
执行报错
TypeError: func() missing 1 required positional argument: 'c'
必须是一一对应的。
2.关键字传参,不按顺序,一一对应。
1 2 3 4 | def max_min(a,b): return a if a > b else b print (max_min(b = 1 ,a = 3 )) |
执行输出:
3
3.混合传参,关键字参数永远在最后面。
1 2 3 4 5 6 7 | def func1(a,b,c,d,e): print (a) print (b) print (c) print (d) print (e) func1( 1 , 2 ,c = 3 , 4 , 5 ) |
执行报错:
SyntaxError: positional argument follows keyword argument
正确的写法
1 2 3 4 5 6 7 | def func1(a,b,c,d,e): print (a) print (b) print (c) print (d) print (e) func1( 1 , 4 ,d = 2 ,c = 3 ,e = 5 ) |
执行输出:
1
4
3
2
5
按照形参角度。
1.位置传参。按顺序,一一对应。
1 2 3 4 5 | def func(a,b,c): print (a) print (b) print (c) func( 'fdsafdas' , 3 , 4 ) |
执行输出:
fdsafdas
3
4
2.默认参数。传参则覆盖,不传则默认,默认参数永远在位置参数后面
1 2 3 | def func(a,b = 666 ): print (a,b) func( 1 , 2 ) |
执行输出:
1 2
1 2 3 | def func(a,b = 666 ): print (a,b) func( 1 ) |
执行输出:
1 666
举一个场景
班主任录入员工信息表
1 2 3 4 5 | while True : username = input ( '请输入姓名: ' ).strip() sex = input ( '请输入性别: ' ).strip() with open ( 'name_list' ,encoding = 'utf-8' ,mode = 'a' ) as f1: f1.write( '{}\t{}\n' . format (username,sex)) |
执行输出:
强制结束程序
查看文件内容
有2个问题
第一,男生居多
第二,完成函数功能
修改一下
1 2 3 4 5 6 7 8 9 10 11 12 | def Infor_entry(username,sex = '男' ): with open ( 'name_list' ,encoding = 'utf-8' ,mode = 'a' ) as f1: f1.write( '{}\t{}\n' . format (username,sex)) while True : username = input ( '请输入姓名(男生以1开头):' ).strip() if '1' in username: #去除1 username = username[ 1 :] Infor_entry(username) else : Infor_entry(username, '女' ) |
执行输出:
查看文件
四、三元运算
三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值
1 | 格式:[on_true] if [expression] else [on_false] |
res = 值1 if 条件 else 值2
三元运算只适用于简单的if else判断,再多一层if判断就不适用了。
举例说明:
1 2 3 | a = 1 b = 2 c = a if a> 1 else b #如果a大于1的话,c=a,否则c=b |
写一个函数,功能比大小,大者返回
1 2 3 4 5 6 7 | def max_min(a,b): if int (a) > int (b): return a else : return b print (max_min( 1 , 3 )) |
执行输出:
3
上面的max_min函数,可以使用三元运算进行简写
1 2 3 | def max_min(a,b): z = a if a > b else b return z |
再进一步简写
1 2 | def max_min(a,b): return a if a > b else b |
今日作业:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 练习题 1 、整理函数相关知识点,写博客 2 、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。 3 、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于 5 。 4 、写函数,检查传入列表的长度,如果大于 2 ,那么仅保留前两个长度的内容,并将新内容返回给调用者。 5 、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。 6 、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。 7 、写函数,检查传入字典的每一个value的长度,如果大于 2 ,那么仅保留前两个长度的内容,并将新内容返回给调用者。 dic = { "k1" : "v1v1" , "k2" : [ 11 , 22 , 33 , 44 ]} PS:字典中的value只能是字符串或列表 8 、写函数,接收两个数字参数,返回比较大的那个数字。 9 、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。 10 、写一个函数完成三次登陆功能,再写一个函数完成注册功能(进阶) 明日默写。 ①, return 的作用。 ②,传参的几种方法,每个都简单写一个代码。 如,实参,按位置传参。 def func(x,y): Pass func( 'a' , 'b' ) |
答案:
2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
2.1 先写一个列表,输出索引
1 2 3 | data = [ 1 , 2 , 3 , 4 , 5 ] for i in range ( len (data)): print (i) |
执行输出:
0
1
2
3
4
2.2 判断索引为奇数,打印出来
1 2 3 4 | data = [ 1 , 2 , 3 , 4 , 5 ] for i in range ( len (data)): if i % 2 = = 1 : print (data[i]) |
执行输出:
2
4
2.3将结果追加到新列表中
1 2 3 4 5 6 7 | data = [ 1 , 2 , 3 , 4 , 5 ] li = [] for i in range ( len (data)): if i % 2 = = 1 : li.append(data[i]) print (li) |
执行输出:
[2, 4]
2.4封装成函数,传入列表和元组
1 2 3 4 5 6 7 8 9 10 11 12 13 | def odd_number(data): li = [] for i in range ( len (data)): if i % 2 = = 1 : li.append(data[i]) return li #传入一个列表 li_1 = [ 1 , 2 , 3 , 4 , 5 ] print (odd_number(li_1)) #传入一个元祖 li_2 = ( 'a' , 'b' , 'c' , 'd' ) print (odd_number(li_2)) |
执行输出:
[2, 4]
['b', 'd']
第二种写法:
1 2 3 | def func1(argv): return argv[ 1 :: 2 ] print (func1([ 1 , 2 , 3 , 4 ])) |
只有一行,可以缩写,优化代码:
1 2 | def func1(argv): return argv[ 1 :: 2 ] print (func1([ 1 , 2 , 3 , 4 ])) |
3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
3.1 定义一个字符串,使用len()判断长度是否大于5
1 2 3 4 5 | obj = 'fdskfie' if len (obj) > 5 : print ( True ) else : print ( False ) |
执行输出:
True
3.2 封装成函数
1 2 3 4 5 6 7 8 | def compare(obj): if len (obj) > 5 : return True else : return False obj = 'fdskfie' print (compare(obj)) |
执行输出:
True
3.3代码精简
1 2 3 4 5 | def compare(obj): return True if len (obj) > 5 else False obj = 'fdsk' print (compare(obj)) |
执行输出:
False
3.4 传入的对象(字符串、列表、元组)
1 2 3 4 5 6 7 8 9 | def compare(obj): return True if len (obj) > 5 else False str_obj = 'fdsk' print (compare(str_obj)) list_obj = [ 1 , 2 , 3 , 4 , 5 , 6 ] print (compare(list_obj)) tuple_obj = ( 'g' , 'k' , 'e' , 'w' ) print (compare(tuple_obj)) |
执行输出:
False
True
False
第二种写法,因为它是一个不等式,结果就是True或者False
1 2 3 | def func2(argv): return len (argv) > 5 print (func2( 'fdsfs' )) |
4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
4.1判断列表长度是否大于2,返回切片
1 2 3 | li = [ 1 , 2 , 3 , 4 ] if len (li) > 2 : print (li[: 2 ]) |
执行输出:
[1, 2]
4.2封装成函数
1 2 3 4 5 6 | def list_slicing(li): if len (li) > 2 : return li[: 2 ] li = [ 1 , 2 , 3 , 4 ] print (list_slicing(li)) |
执行输出:
[1, 2]
5、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。
5.1使用for循环遍历,并判断类型输出
1 2 3 4 5 6 7 8 9 10 | data = '1 3a &% ' for i in data: if i.isdigit(): print ( '数字为: {}' . format (i)) elif i.isalpha(): print ( '字母为: {}' . format (i)) elif i.isspace(): print ( '空格为: {}' . format (i)) else : print ( '其他为: {}' . format (i)) |
执行输出:
数字为: 1
空格为:
数字为: 3
字母为: a
空格为:
其他为: &
其他为: %
空格为:
5.2 增加计数功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | data = '1 3a &% ' #个数统计 digit = 0 letter = 0 space = 0 other = 0 for i in data: if i.isdigit(): digit + = 1 elif i.isalpha(): letter + = 1 elif i.isspace(): space + = 1 else : other + = 1 print ( '数字个数为: {}' . format (digit)) print ( '字母个数为: {}' . format (letter)) print ( '空格个数为: {}' . format (space)) print ( '其他个数为: {}' . format (other)) |
执行输出:
数字个数为: 2
字母个数为: 1
空格个数为: 3
其他个数为: 2
5.3优化输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | data = '1 3a &% ' #个数统计 digit = 0 letter = 0 space = 0 other = 0 for i in data: if i.isdigit(): digit + = 1 elif i.isalpha(): letter + = 1 elif i.isspace(): space + = 1 else : other + = 1 #格式化输出 layout = ''' 数字个数为: {} 字母个数为: {} 空格个数为: {} 其他个数为: {} ''' print (layout. format (digit,letter,space,other)) |
执行程序,效果同上。
5.4 封装成函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | def counta(data): # 个数统计 digit = 0 letter = 0 space = 0 other = 0 for i in data: if i.isdigit(): digit + = 1 elif i.isalpha(): letter + = 1 elif i.isspace(): space + = 1 else : other + = 1 # 格式化输出 layout = ''' 数字个数为: {} 字母个数为: {} 空格个数为: {} 其他个数为: {} ''' return layout. format (digit, letter, space, other) data = '1 3a &% ' print (counta(data)) |
执行输出:
数字个数为: 2
字母个数为: 1
空格个数为: 3
其他个数为: 2
老师的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def func4(argv): dic = { 'digit' : 0 , 'aplha' : 0 , 'space' : 0 , 'other' : 0 } for i in argv: if i.isdigit(): dic[ 'digit' ] + = 1 elif i.isalpha(): dic[ 'aplha' ] + = 1 elif i.isspace(): dic[ 'space' ] + = 1 else : dic[ 'other' ] + = 1 return '数字{},字母{},空格{},其他{}' . format (dic[ 'digit' ],dic[ 'aplha' ],dic[ 'space' ],dic[ 'other' ]) print (func4( 'fdsf 224&&3Tdw ~!wift4t4ttd f' )) |
执行输出:
数字6,字母16,空格4,其他4
6、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
6.1用一个变量,使用for循环遍历每一个元素,判断是否为空格
1 2 3 4 5 6 7 | data = '13a &%' for i in data: # 判断内容是否为空 if i = = ' ' : print ( '对象含有空格' ) else : print ( '对象没有空格!' ) |
执行输出:
对象没有空格!
对象没有空格!
对象没有空格!
对象含有空格
对象没有空格!
对象没有空格!
6.2 使用标志位
1 2 3 4 5 6 7 8 9 10 11 12 13 | data = '13 a&%' for i in data: # 判断内容是否为空 if i = = ' ' : flag = True break else : flag = False if flag: print ( '对象含有空格!' ) else : print ( '对象没有空格' ) |
执行输出:
对象含有空格!
6.3 封装成函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def contain_space(data): for i in data: # 判断内容是否为空 if i = = ' ' : flag = True break else : flag = False if flag: return '对象含有空格!' else : return '对象没有空格' data = '13a&%' print (contain_space(data)) |
执行输出:
对象没有空格
6.4代码优化
1 2 3 4 5 6 7 8 9 10 11 12 13 | def contain_space(data): for i in data: # 判断内容是否为空 if i = = ' ' : flag = True break else : flag = False return '对象含有空格!' if flag else '对象没有空格' data = '13 a&%' print (contain_space(data)) |
执行输出:
对象含有空格!
7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
7.1遍历字典,并判断values如果大于2,进行切片
1 2 3 4 5 6 | dic = { "k1" : "v1v1" , "k2" : [ 11 , 22 , 33 , 44 ]} for k,v in dic.items(): if len (v) > 2 : #切片 v = v[: 2 ] print (v) |
执行输出:
v1
[11, 22]
7.2修改values值
1 2 3 4 5 6 7 8 9 | dic = { "k1" : "v1v1" , "k2" : [ 11 , 22 , 33 , 44 ]} for k,v in dic.items(): if len (v) > 2 : #切片 v = v[: 2 ] #修改values的值 dic[k] = v print (dic) |
执行输出:
{'k1': 'v1', 'k2': [11, 22]}
7.3封装成函数
1 2 3 4 5 6 7 8 9 10 11 12 | def dictionary(dic): for k,v in dic.items(): if len (v) > 2 : #切片 v = v[: 2 ] #修改values的值 dic[k] = v return dic dic = { "k1" : "v1v1" , "k2" : [ 11 , 22 , 33 , 44 ]} print (dictionary(dic)) |
执行输出:
{'k1': 'v1', 'k2': [11, 22]}
老师的代码:
1 2 3 4 5 6 7 | def func7(argv): for i in argv: argv[i] = argv[i][: 2 ] return argv dic = { "k1" : "v1v1" , "k2" : [ 11 , 22 , 33 , 44 ]} print (func7(dic)) |
执行输出,效果同上
8、写函数,接收两个数字参数,返回比较大的那个数字。
老师讲过,直接贴代码
1 2 3 4 | def max_min(a,b): return a if a > b else b print (max_min( 5 , 8 )) |
执行输出:
8
9、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。
9.1 把今天早上的默认的代码贴过来
1 2 3 4 5 6 7 8 9 | import os with open ( 'log.txt' ,encoding = 'utf-8' ) as f1,\ open ( 'log.bak' ,encoding = 'utf-8' ,mode = 'w' ) as f2: for i in f1: new_i = i.replace( 'alex' , 'SB' ) f2.write(new_i) os.remove( 'log.txt' ) os.rename( 'log.bak' , 'log.txt' ) |
9.2封装成函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ''' path 文件路径(此文件python能够找到),比如log.txt content 需要修改的内容,比如aa modify 要替换的内容,比如bb ''' def file_replace(path,content,modify): import os with open (path, encoding = 'utf-8' ) as f1, \ open (path + '.bak' , encoding = 'utf-8' , mode = 'w' ) as f2: for i in f1: new_i = i.replace(content,modify) f2.write(new_i) os.remove(path) os.rename(path + '.bak' , path) |
9.3新建一个文件log.txt,内容如下:
1 | 人生苦短,我想学python |
9.4执行函数
1 2 3 4 | file = 'log.txt' content = 'Python' modify = 'python(最好的语言)' file_replace( file ,content,modify) |
9.5查看文件内容
10、写一个函数完成三次登陆功能,再写一个函数完成注册功能(进阶)
10.1将上次写的三次登录代码贴过来
1 2 3 4 5 6 7 8 9 10 11 12 13 | username = 'xiao' password = '123' max = 3 i = 0 while i < max : i + = 1 name = input ( '请输入用户名:' ) pwd = input ( '请输入密码:' ) if name = = username and pwd = = password: print ( '登陆成功' ) break else : print ( '用户名或密码错误,还剩余{}次机会!' . format ( max - i)) |
10.2将用户名与密码存储到字典中,修改登录程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | users = [ { 'username' : 'zhangsan' , 'password' : '123' }, { 'username' : 'lisi' , 'password' : '123' }, ] max = 3 count = 0 while count < max : count + = 1 name = input ( '请输入用户名:' ).strip() pwd = input ( '请输入密码:' ).strip() for i in users: username = i[ 'username' ] password = i[ 'password' ] #判断用户名和密码 if name = = username and pwd = = password: print ( '登陆成功' ) #设置标志位 flag = True break else : print ( '用户名或密码错误,还剩余%s次机会!' % ( max - count)) flag = False #判断标志位,跳出循环 if flag: break |
10.3执行输出:
10.4封装成函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | users = [ { 'username' : 'zhangsan' , 'password' : '123' }, { 'username' : 'lisi' , 'password' : '123' }, ] def login(): max = 3 count = 0 while count < max : count + = 1 name = input ( '请输入用户名:' ).strip() pwd = input ( '请输入密码:' ).strip() for i in users: username = i[ 'username' ] password = i[ 'password' ] #判断用户名和密码 if name = = username and pwd = = password: print ( '登陆成功' ) return True else : print ( '用户名或密码错误,还剩余%s次机会!' % ( max - count)) return False print (login()) |
10.5执行输出:
10.6写一个注册功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def register(): while True : reg_user = input ( '请输入注册用户名: ' ).strip() reg_pwd1 = input ( '请输入登录密码: ' ).strip() reg_pwd2 = input ( '请再次确认密码: ' ).strip() #判断2次密码是否一致 if reg_pwd1 = = reg_pwd2: #加入到用户列表中 users.append({ 'username' :reg_user, 'password' :reg_pwd1}) return '注册成功!您注册的用户名为:{}\n登录密码为: {}' . format (reg_user,reg_pwd1) else : print ( '2次密码输入不一致,请重新输入!' ) return False |
10.7执行注册函数
1 2 3 4 5 6 7 8 9 | #执行注册 print (register()) #打印用户列表 print ( '\n' ) print ( '当前用户列表' .center( 20 , '*' )) for i in users: print ( '{}\t{}\t{}' . format (users.index(i) + 1 ,i[ 'username' ],i[ 'password' ])) print (' '.center(20,' * ')) |
10.8执行输出:
完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | users = [ { 'username' : 'zhangsan' , 'password' : '123' }, { 'username' : 'lisi' , 'password' : '123' }, ] def login(): max = 3 count = 0 while count < max : count + = 1 name = input ( '请输入用户名:' ).strip() pwd = input ( '请输入密码:' ).strip() for i in users: username = i[ 'username' ] password = i[ 'password' ] #判断用户名和密码 if name = = username and pwd = = password: print ( '登陆成功' ) return True else : print ( '用户名或密码错误,还剩余%s次机会!' % ( max - count)) return False def register(): while True : reg_user = input ( '请输入注册用户名: ' ).strip() reg_pwd1 = input ( '请输入登录密码: ' ).strip() reg_pwd2 = input ( '请再次确认密码: ' ).strip() #判断2次密码是否一致 if reg_pwd1 = = reg_pwd2: #加入到用户列表中 users.append({ 'username' :reg_user, 'password' :reg_pwd1}) return '注册成功!您注册的用户名为:{}\n登录密码为: {}' . format (reg_user,reg_pwd1) else : print ( '2次密码输入不一致,请重新输入!' ) return False #执行登录 #print(login()) #执行注册 print (register()) #打印用户列表 print ( '\n' ) print ( '当前用户列表' .center( 20 , '*' )) for i in users: print ( '{}\t{}\t{}' . format (users.index(i) + 1 ,i[ 'username' ],i[ 'password' ])) print (' '.center(20,' * ')) |
老师的部分代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | def register( * args, * * kwargs): flag = True while flag: username = input ( '请输入注册的用户名:' ).strip() with open ( 'register_msg' ,encoding = 'utf-8' ) as f1: for i in f1: li = i.strip().split() # [张三,123] if username = = li[ 0 ] or username = = '' : print ( '用户名已存在,请重新注册' ) break else : password = input ( '请输入您注册的密码:' ) with open ( 'register_msg' ,encoding = 'utf-8' ,mode = 'a' ) as f2: f2.write( '\n{}\t{}' . format (username,password)) print ( '注册成功' ) return register() def login( * args, * * kwargs): pass login() |
明日默写。
①,return的作用。
1.在函数中,遇到return结束函数。
2.将值返回给函数的调用者。
②,传参的几种方法,每个都简单写一个代码。
如,实参,按位置传参。
def func(x,y):
Pass
func('a','b')
1.位置传参。按顺序,一一对应。
1 2 3 4 | def func(a,b): print (a) print (b) func( 3 , 4 ) |
2.关键字传参,不按顺序,一一对应。
1 2 3 4 | def max_min(a,b): return a if a > b else b print (max_min(b = 1 ,a = 3 )) |
3.混合传参,关键字参数永远在最后面。
1 2 3 4 5 | def func1(a,b,c): print (a) print (b) print (c) func1( 1 , 4 ,c = 3 ) |
4.默认参数,传参则覆盖,不传则默认
1 2 3 | def func(a,b = 666 ): print (a,b) func( 1 , 2 ) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix