函数的定义与调用
定义一个什么事也不做的空函数,可以用 pass 语句; pass 可以用来作为占位符,还没想好怎么写函数的代码,就可以先放一个 pass ,让代码能运行起来
所谓“返回值”,就是程序中函数完成一件事情后,最后给调用者的结果. 没有返回值,默认返回None
1)函数名的命名规则要符合python中的命名要求。一般用小写字母和单下划线、数字等组合 匈牙利命名法(sUserName), 驼峰式大小写(userName), 帕斯卡命名法(UserName) 2)def是定义函数的关键词,这个简写来自英文单词define 3)函数名后面是圆括号,括号里面,可以有参数列表,也可以没有参数 4)千万不要忘记了括号后面的冒号 5)函数体(语句块),相对于def缩进,按照python习惯,缩进四个空格
输入第一行中给出2个不超过100的正整数,分别是系统产生的随机数、以及猜测的最大次数 N。随后每行给出一个用户的输入,直到出现负数为止。
输出格式: 在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。
import random # 1). 形参-定义函数时里面的参数: 形式参数(可以任意修改名字) # 2). 如果函数没有return, 默认会返回None; # 3). 实参-调用函数时指定的值 : 实际存在的参数 def isEuqal(guessNum, gameNum): """ 判断用户猜测的数字和游戏给定的数字是否相等? :param guessNum: :param gameNum: :return: Bool-是/否 """ if guessNum > gameNum: print("太大了") return False elif guessNum < gameNum: print("太小了") return False else: print("恭喜你, 中了100万") return True def main(): """ 脚本的主函数 :return: """ for count in range(3): gameNum = random.randint(1, 100) guessNum = int(input("请开始游戏, 猜测数字(1-100):")) if isEuqal(guessNum, gameNum): break else: print("游戏结束, 一百万还很遥远") main()从理论上说,不用函数,也能够编程,我们在前面已经写了程序,就没有写函数,当然,用python的内建函数姑且不算了。现在之所以使用函数,主要是:
降低编程的难度(分而治之的思想)代码重用。避免了重复劳动,提供了工作效率.如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量。
在函数外边定义的变量叫做全局变量全局变量能够在所有的函数中进行访问如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的小技巧: 强龙不压地头蛇(就近原则)不使用global声明全局变量时不能修改全局变量?
global的本质是声明可以修改全局变量的指向, 即变量可以指向新的数据。1). 不可变类型的全局变量: 指向的数据不能修改, 不使用global时无法修改全局变量。2). 可变类型的全局变量: 指向的数据可以修改, 不使用global时可以修改全局变量。定义时小括号中的参数,用来接收参数用的,称为 “形参” 调用时小括号中的参数,用来传递给函数用的,称为 “实参”
调用函数时,如果参数个数不对,Python 解释器会自动检查出来,并抛出 TypeError;
如果参数类型不对,Python 解释器就无法帮我们检查。数据类型检查可以用内置函数 isinstance 实现可变参数就是传入的参数个数是可变的,可以是 1 个、2 个到任意个,还可以是 0 个。*args 以数学题为例子,给定一组数字 a,b,c…, 请计算 a 2 + b 2 + c 2 + …
如果已经有一个 list 或者 tuple,要调用一个可变参数怎么办? 1). Python 允许你在 list 或 tuple 前面加一个 * 号; 2). 把 list 或 tuple 的元素变成可变参数传进去; largs = [1,2,3] func(largs[0],largs[1],largs[2]) func(*largs)
关键字参数允许传入 0 个或任意个含参数名的参数; 这些关键字参数在函数内部自动组装为一个 dict; 关键字参数用**kwargs;
参数组合是指可以必选参数、 默认参数、 可变参数和关键字参数一起使用。 参数定义的顺序必须是:必选参数、 默认参数、可变参数和关键字参数。
