# -*- coding: utf-8 -*-
# @Time:
# @Auther: kongweixin
# @File:
"""
1、什么是函数
函数就相当于具备某一功能的工具
函数的使用必须遵循一个原则:
先定义
后调用
2、为何要用函数
1、代码冗余,程序的组织结构不清晰,可读性差
2、可维护性、扩展性差
3、如何用函数
先定义
三种定义方式
后调用
三种调用方式
返回值
三种返回值的形式
"""
# 1、先定义
# #定义的语法
"""
def 函数名(参数1,参数2,...):
###文档描述####
函数体
return值
"""
########形式一:无参函数##########
# def func():
# print('孔维鑫 is a GOOdboy')
#
# func()
#####重点!!!!!!!!!!!
# 定义函数发生的事情
# 1、申请内存空间 存数体代码
# 2,将上述内存地址绑定 数名
# 3、定义函数不会执行函数体代码,但是会检测函数体语法
# 调用函数发生的事情
# 1、通过函数名找到 数的内tt址
# 2、然后加口号就是在触发函数体代码的执行
# print(func)
# func()
# 示范1
# def bar():#bar=函数的内存地址 1
# print("from bar")
#
# def foo():
# # print(bar)
# bar()
# print('from foo')
# foo()
# 示范2
# def foo():
# # print(bar)
# bar()
# print('from foo')
# foo() #会报错 因为此时bar未定义
# def bar(): # bar=函数的内存地址 1
# print("from bar")
#
# foo()#不会报错
########形式二:有参函数##########
# 例如 print() open() input() list()
# def func(x,y):
# print(x,y)
# func(1,2)
########形式三:空函数##########
# def func(x,y):
# pass
"""
函数怎么用 ???
举例说明:
如果你想在统计三个年级的每个年级学生人数中做一个加法运算计算各年级总体人数
正常情况我们应该是
比如:
一年级:
男生1=20
女生1=30
一年级总人数=男生1+女生1
print("一年级总计人数为:-----{}".format(一年级总人数))
二年级
男生2=30
女生2=30
二年级总人数=男生2+女生2
print("二年级总计人数为:-----{}".format(二年级总人数))
三年级
男生3=50
女生3=30
三年级总人数=男生3+女生3
print("三年级总计人数为:-----{}".format(三年级总人数))
总人数=一年级总人数+二年级总人数+三年级总人数
print(总人数)
但是每次这样进行计算确实比较复杂,所以用函数就可以解决这这个问题
def p_number(boy,girl):
总计人数=boy+girl
print("总计男女人数为:-----{}".format(总计人数))
return 总计人数
一年级人数 = p_number(20,30)
二年级人数 = p_number(30,30)
三年级人数 = p_number(50,30)
总人数=一年级人数+二年级人数+三年级人数
print(总人数)
这样就可以进行多次利用
"""
# 三种定义方式各用何处
# 1,无参函数的应用场景
# 接收用户输入信息
# name= input("username>>>:")
# age = input("user age>>>:")
# msg='名字:{}年龄:{}'.format(name,age)
#
# 但是如果是要输入三十次呢??
# def interactive():
# name = input("username>>>:")
# 而且还可以在函数里面添加其他内容
# age = input("user age>>>:")
# msg = '名字:{}年龄:{}'.format(name, age)
# print(msg)
# interactive()
# interactive()
# interactive()
# interactive()
# 2,有参函数的应用场景
# 相加函数
# def add(x,y):
# res=x+y
# print(res)
# 传统做法
# x = 20
# y = 30
# res = x+y
# print(res)
# 换句话说 :如果函数是工场 那参数相当于加工材料
# 3,空函数的应用场景 #构思的时候
# 我们可能想到的功能有用户认证,下载,上传,浏览,切换目录等功能,可以先做出如下定义:
# def auth_user():
# """user authentication function"""
# pass
#
# def download_file():
# """download file function"""
# pass
#
# def upload_file():
# """upload file function"""
# pass
#
# def ls():
# """list contents function"""
# pass
#
# def cd():
# """change directory"""
# pass
# 二 调用函数
# 1.0 语句的形式:只去调用函数,不做其他操作
# interactive()
# 2.0表达式函数
# def add(x,y):#参数-》原材料
# res=x+y
# return res#返回值-》产品]
# 赋值表达式
# res=add(1,2)
# print(res)
# 数学表达式
# res=add(1,2)*10
# print(10)
# 3.0函数调用可以当做参数
# def add(x, y): # 参数-》原材料
# res = x + y
# return res # 返回值-》产品]
#
# res=add(add(1,2),10)
# print(res)
# 三,函数返回值
# return是函数结束的标志,即函数体代码一旦运行到return
# 会立刻终止函数的运行,并且会将return后的值当做本次运行的结果返回:
# 之前的需求
# def func(x,y):
# print('1111')
# print('2222')
# print('3333')
# res =x+y #res = 1+2
# return res
# res = func(1,2)
# print(res)
# 性质:函数体代码一旦运行到return会立刻终止函数的运行
# def func():
# print(1111)
# return # 后面就算是while 也会结束 (一般用的是break)
# print(2222)
# print(3333)
#
#
# func()
# 1.返回none:函数体内没有return
# return
# return None
# def func():
# pass
# res= func()
# print(res)
# def func():
# return None
# res= func()
# print(res)
# 2.返回一个值: (return 值)
# def func():
# return 10
# res = func()
# print(res)
# 3.返回多个值: (return +多个值): 用逗号分隔开多个值,会被return返回成元组
# def func():
# return 10, "kwx", [1, 2] # 返回值元组 不用加括号
#
#
# res = func()
# print(res, type(res))
"""
说白了,函数就是一种工具,
举个例子: 一个机器人 | (你们之前做过ardunio的简单的单片机设计可以知道 所有功能都会变成一个个函数 进行单独使用)
假如这个机器人脑子里啥都是空的就等你输入功能
首先 : 我们是不是先进行构思
第一,是不是要让机器人会动起来吧 怎么动!!!!
定义空函数
def feet(): 脚怎么动
pass
def hands(): 手怎么动
pass
def arms(): 胳膊怎么动
pass
def head(): 头怎么动
pass
等等
内容是看自己的需求来进行确定的!!!!!!(程序员常说的一句话"看情况!!!")
这里举个例子:
我们知道我们写过9x9乘法表
for i in range (1,10):
for j in range(1,i+1):
print("{}x{}={}".format(i,j,i*j),end=" ")
print()
那现在的需求就是输入几 就输出他之前的所有的乘法表
如果没函数的写法:
(第一种)直接改for i in range (1,10):里的范围
eg: 前五的乘法表
for i in range (1,5):
for j in range(1,i+1):
print("{}x{}={}".format(i,j,i*j),end=" ")
print() #这种是不是每次都会改数字啊是不是很麻烦!!!!
(第二种)在第一种基础上优化 每次改太复杂,会不会用到一个input()进行简化赋值
n = int(input("亲输入你要输出的值:"))
# print(type(n))#<class 'str'>这输出的是字符串那是不是就要进行转化啊!!! 怎么转的 是不是想到int()!!!!(你应该想到的)
for i in range(1,n+1): #吧范围进行变量赋值!! 注意我们知道这里是左闭右开 所以n是需要加1的 n+1
for j in range(1, i + 1):
print("{}x{}={}".format(i, j, i * j), end=" ")
(第三种)一行解决 如果内置函数掌握了的话
print('\n'.join([' '.join(["%2s x%2s = %2s"%(j,i,i*j) for j in range(1,i+1)]) for i in range(1,10)]))
自己看看 !!!都学过!!! 数据类型内置函数里面的
虽然已经很好了但是大家在看用函数写的是啥样的
<普通> 将重复部分进行加到函数中
def num(n):
for i in range (1,n+1): #重
for j in range(1,i+1): #复 直接写到函数中
print("{}x{}={}".format(i,j,i*j),end=" ") #部
print() #分
num(5)
<第三对应> 十分简洁
def num(n):
return '\n'.join([' '.join(["%2s x%2s = %2s" % (j, i, i * j) for j in range(1, i + 1)]) for i in range(1, n+1)])
print(num(5))
"""