企业网站设计怎么做网站建设当中的技术解决方案
一、初识函数(function)
编程函数!=数学函数,里面的是逻辑,功能,而不是套公式
编程函数的作用实现特定操作的一段代码
你现在请客,每个人都点同样的一份吃的,请100个人
     1.薯条
     2.上校鸡块
     3.可乐
     
 那这个时候会用到什么?套餐
 出个套餐 美味套餐(薯条,可乐,上校鸡块)
程序把一些会经常用到的代码保存起来,取个有意义的名字,以后要用直接调用就OK
变量:保存一个/多个数据
 函数:保存的是一段或者多段代码
     
 函数的优点:
     1.遇到重复代码时,可以定义为函数,省事
     2.修改起来比较方便
     
 本质就是写好的一些代码 可以实现特定的功能 取个好记的名字保存起来 方便后续使用
二、函数基础
函数的命名规则和变量是一样的
     1.由数字,字母,下划线组成
     2.不能数字开头,不能纯数字,不能有其他的特殊符号
     3.区分大小写
     4.不能用关键字/内置函数
     5.见名知意
     
 函数如果没有特别作用,没想好名字,可以取名fun
函数的使用分为两步:
     1.定义函数
     2.调用函数 
2.1定义函数&调用函数
1.定义函数
     def 函数名():
         代码内容
     def fun():
         print('好好学习')  
         
 调用函数:在函数名后面加个括号,就是调用函数
     函数名()
     fun()
     
 实例:
     def fun():
         print('好好学习')
    fun()
     
 2.声明空函数,还没有想好内容,就先写个pass
     def 函数名():
         pass
     def fun2():
         pass
三、函数参数
def fun():
     print(77+66)
函数里的数据如果是一成不变的,那很鸡肋,函数会接触到各种各样的数据,函数可以根据情况来接收一些数据,并在函数里处理
让函数里的内容可以更加灵活,数据不是定死的-->函数参数
形参-->没有具体的数据,只是先占位置-->定义阶段
 实参-->有具体的数据,在运行时取代形参-->调用阶段
声明带参函数:
     def 函数名(形参名):
         代码内容
         
     def fun(money):
         print(f'我最喜欢{money}了')  
调用带参函数
     函数名(实参)
     
     fun(50)
     fun(100)
     fun('一百万')
     
 一个萝卜一个坑,不要多,也不要少,你定义了几个形参,就传几个实参,否则会报错
3.1必备参数
有几个形参,就传几个实参,数量要一致
 定义时:
     def 函数名(形参1,形参2):
         代码内容
         
 调用时:
     函数名(实参1,实参2)
     
 def add1(num1,num2):
     print(num1+num2)
add1(70,20) #少写多写都会报错
3.2默认参数
在声明参数的时候就提前赋好值,作为一个默认的参数
定义时:
     def 函数名(形参1,形参2=值):
         代码内容
         
 调用时:
     函数名(实参1)
     
 def fun(money,people='伊尔'):
     print(f'{people}最喜欢{money}了')
fun(100)
 fun(50)
 fun(50,'张三') #不会报错,但是张三会覆盖原来的值伊尔
注意:赋值的默认参数要写在最后面,不能放在前面
3.3不定长参数(1)
有的时候可能出现不清楚这个函数会接收多少个参数,这时候就用不定长参数1
 不定长参数1可以一次性接受多个数据,接收到的数据为元组类型
 不定参数的表现形式为:*
 参数名是不固定的,但是正常规范命名都是取名*args
定义时:
     def 函数名(*agrs):
         代码内容
         
 调用时:
     函数名(实参1,实参2,实参3,...)
     
 def room(*args):
     print(args)
     print(type(args)) #<class 'tuple'>
     print(args[0])
room('张三',17,19,10.6,'王五')
def message(name,age,*args):
     print(name) #伊尔
     print(age) #18
     print(args) #('张三', 17, 19, 10.6, '王五', '李四')
     print(args[2:5]) #(19, 10.6, '王五')
message('伊尔',18,'张三',17,19,10.6,'王五','李四')
3.4不定长参数(2)
可以一次性接受多个数据,接收的数据类型为键值对,得到的数据为字典类型
 不定长参数2的表现形式为:**
 参数名同样不固定,但最好叫**kwargs
定义时:
     def 函数名(**kwargs):
         代码内容
         
 调用时:
     函数名(键=值,键=值,键=值,...) #键名不用加引号
     
 def fun2(**kwargs):
     print(kwargs)
     print(type(kwargs)) #<class 'dict'>
fun2(name='伊尔',age=18)
def grade(c,m,**kwargs):
     print(c)
     print(m)
     print(kwargs)
 grade(98,99,name='伊尔',age=18)
def fun3(a,b,*args,**kwargs):
     print(a*b) #50
     print(args) #(15, 20, 7.6)
     print(kwargs)  #{'name': '伊尔', 'java': 100}
fun3(5,10,15,20,7.6,name='伊尔',java=100)
     
 注意:不定长参数1要在不定长参数2前面
四、返回值(return)
如果函数内只是单纯的写print,代表着这个函数没有定义返回值,如果一个函数没有定义返回值的话,函数的返回值默认为空
def add1(num1,num2):
     print(num1+num2) #这个函数没有定义返回值
add1(70,520)
 a=add1(70,520)
 print(a) #函数没有定义返回值的话就为None
 # print(type(a))
 # print(a+10)
如果在函数里,一个数据如果是print出来,那就是只能看,不能用
 如果想要使用这个数据,需要的是return返回,而不是print输出
return 返回值
 把值返回给函数,可以用来使用,返回值一般是结合函数参数来使用
1.定义一个带有返回值的函数
     def 函数名():
         return 返回值数据
     
 2.输出返回值内容:把函数名() 用print包裹起来 这个动作就会达到两个目的
         1.调用函数
         2.输出函数的返回值
例:
 def fun(a,b):
     return a+b
fun(6, 10) #直接调用函数,不会输出返回值
 print(fun(6, 10)) #所以要打印返回值需要print包裹起来
返回值可以有多个,并且也可以输出多个返回值
 细节:
     1.返回值的类型是不限的,int/float/list/dict...都可以,也可以返回一个函数
     2.返回值的数量是不限的,可以返回多个数据,返回多个数据得到的数据类型为元组类型
     def 函数名():
         return 返回值1,返回值2
     
     def fun3():
         return '好好学习',1,8.0,(1,2),[1,2]
     res2=fun3()
     print(type(res2)) #<class 'tuple'>
     print(fun3())
     
 得到的返回值还有一种用法是可以把函数返回值赋值给变量
     变量名=函数名() #把函数返回值赋值给变量
     def fun4(a,b):
         return a*b
    res=fun4(3,5) #把函数fun4的返回值赋值给变量res
     print(res) #15
     print(res+10) #返回值可以拿来用 所以可以+10
注意:
     在return后面的代码是不会执行的,因为函数执行到return就会结束
     def talk():
         print('好好学习')
         return '天天向上'
         print('hhhhh')
    # talk() #好好学习
     print(talk()) #先调用函数打印好好学习,其次打印返回值向上
     print(talk) #打印函数名 显示出的是内存地址
五、内置函数(基础篇)
python自带的一些功能函数
 序列类型/散列类型/数据类型转换方法
特点:
     1.都有一个小括号
     2.每个函数都有自己的功能
     
 print() : 输出语句
 input(): 输入语句
 type() : 获取数据类型
     
 len(): 获取数据长度(里面有多少个元素)
 min(): 获取最小值
 max(): 获取最大值
 sum():  获取数据的和
     
 demo=' 好好学习'
 print(max(li))
 print(min(li))
 print(sum(li))
 print(len(li))
 print(len(demo))
六、文档字符串
基于函数写的注释,看起来和注释差不多,但是可以被调用,在学函数时,更推荐使用文档字符串,里面可以写
     1.这个函数是干嘛用的
     2.这个函数参数都是干嘛用的
     3.返回值是干嘛用的
     
 输出文档字符串:
     函数名.__doc__
     
 def fun5(a,b):
     '''
     我是做加法运算
     :param a: float型
     :param b: float型
     :return:a+b的结果
     '''
     return a+b
print(fun5.__doc__)
 print(print.__doc__)
七、练习
1.定义一个函数,内容为输出一句('人生苦短,我选python'),并调用该函数
2.定义一个函数,该函数在调用的时候会接收2个数值数据,返回值为返回里面较大的值,并调用输出
3.定义一个函数,该函数在调用的时候会接收一个元组数据,元组里的值都为数值,返回值为该参数的'长度'以及'元组里数值的和',并调用输出
4.定义一个函数,该函数在调用的时候会接收一个字符串数据为你的名字,在声明的时候有个默认参数值为'多喝热水',函数功能为输出一句 '<你的名字>要<好好学习>' ,并调用输出
5.通过函数实现一个计算器(加减乘除)
     小提醒:把加减乘除分别写成4个函数,让用户选择对应功能,数值也同样由用户输入(计算两个值之间的加减乘除的操作)
