一、函数是什么?
函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
二、函数(方法、功能)的作用:
1.提高代码的复用性;
2.让代码更简洁
三、python中函数的定义:
定义函数使用def关键字,后面是函数名,函数名不能重复
def sayHello(): #函数名 print(‘hello‘) #函数体 #函数不调用是不会被执行的 sayHello() #函数名加括号调用函数
四、函数的参数:
形参:形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。
实参:实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。函数调用结束返回主调用函数后则不能再使用该形参变量。
def calc(a,b): #形参,形式参数 #a、b是位置参数,必填参数 res=a*b print(‘%s*%s=%s‘%(a,b,res)) calc(7,8) #实参,实际参数
简单点说,形参就是函数接收的参数,而实参就是你实际传入的参数。
def op_file(file_name,conent=None): #默认值参数,它是非必填的 f = open(‘file_name‘,‘a+‘,encoding=‘UTF-8‘) #‘a+‘能读也能写 f.seek(0) if conent: #不为空代表写,为空代表读 f.write(conent) f.flush() else: all_users=f.read() return all_users #调用函数之后,返回什么结果 f.close()
res=op_file(‘a.txt‘)
print(res)
局部变量:函数里面定义的变量,都是局部变量,只能在函数里面用,出了函数之后就不能用了
全局变量:公共的变量,都可以用的变量
1.不安全,因为所有人都可以改;
2.全局变量会一直占着内存
name=‘张三‘ # 全局变量 #如果要改全局变量的话,要先声明一下修改的值是全部变量 def sayName(): global name #global声明全局变量 name = ‘李四‘ print(‘name1‘,name) sayName() print(‘name2‘,name)
return的作用:
1.把函数处理的结果返回回来;
2.立即结束函数,函数里面遇到return,函数会立即结束
def h(): #函数里面遇到return函数就立即结束了 for i in range(5): print(i) if i==3: return #只写一个return的话,就返回Noneres=h()
print(res)
import string def hr(pwd): #长度6-11 #字母和数字 if len(pwd)>5 and len(pwd)<12: if set(pwd) & set(string.ascii_letters) and set(pwd) &set(string.digits): print(‘密码合法‘) else: print(‘密码不合法‘) else: print(‘密码不合法‘) res=hr(‘abc123‘) #函数里面如果没有return的话,默认返回Noneprint(res)
判断是否是小数:
def is_float(s): s=str(s) if s.count(‘.‘)==1: s_list=s.split(‘.‘) left=s_list[0] right=s_list[1] if left.isdigit() and right.isdigit(): #正小数 return True elif left.startswith(‘-‘) and left.count(‘-‘)==1: #判断负号是否是合法的,是否有可能是合法的负数 if left.split(‘-‘)[1].isdigit() and right.isdigit(): #判断合法负小数 return True return False # print(is_float(‘1.5‘))
常量:一个不变的值,定义常量变量名要大写
josn串:一串字符串,里面只有双引号,没有单引号
loads:传的是字符串
import json #json串是一个字符串 f=open(‘product.json‘,encoding=‘UTF-8‘) res=f.read() product_dic=json.loads(res) #loads把json串变成Python的数据类型 print(product_dic.get(‘product_info‘))
load():传一个文件对象,会帮你读文件
import json #json串是一个字符串 f=open(‘product.json‘,encoding=‘UTF-8‘) print(json.load(f)) #不带s,好处:不需要再read一次,
字典转换成json
d={ ‘a‘:{ ‘addr‘:‘北京‘, ‘age‘:28 }, ‘b‘:{ ‘addr‘:‘上海‘, ‘age‘:18 } } fw=open(‘user_info.json‘,‘w‘,encoding=‘utf-8‘) dic_json=json.dumps(d,ensure_ascii=False,indent=4)
#字典转换成json,ensure_ascii显示中文,indent=4缩进4个空格 fw.write(dic_json)
dump:
d={ ‘a‘:{ ‘addr‘:‘北京‘, ‘age‘:28 }, ‘b‘:{ ‘addr‘:‘上海‘, ‘age‘:18 } } fw=open(‘user_info.json‘,‘w‘,encoding=‘utf-8‘) json.dump(d.fw,ensure_ascii=False,indent=4)
函数的不固定参数:
*非必填参数,无参数个数限制,传过来的参数放在元祖里
def syz(*args): #参数组 print(args) username=args[1] pwd=args[2] syz() syz(‘huang‘,‘123‘,‘dasd‘)
打印结果:
(‘huang‘,‘123‘,‘dasd‘)
**
def sys2(**kwargs): #关键字参数 print(kwargs) sys2() sys2(name=‘nhy‘,age=19) sys2(‘nhy‘)
打印结果:
{}
{“name”:‘nhy‘,"age"=19}
报错
小练习:
import json def op_data(filename,dic=None): if dic: #写入进去 with open(filename,‘w‘,encoding=‘utf-8‘) as fw: json.dump(dic,fw,ensure_ascii=False,indent=4) else: with open(filename,encoding=‘utf-8‘) as fr: return json.load(fr) FILE_NAME=‘user_info.json‘ all_users=op_data(‘user_info.json‘) for i in range(3): choice = input(‘输入:1.注册、2删除‘) if choice==‘1‘: username=input(‘username:‘) password=input(‘password:‘) if username not in all_users: all_users[username]=password op_data(FILE_NAME,all_users) elif choice==‘2‘: username=input(‘username:‘) all_users.pop(username) op_data(FILE_NAME,all_users)
原文:https://www.cnblogs.com/huangr/p/8887577.html