1、python函数有几部分组成?分别是什么?
函数名称 函数参数 表达式 函数返回值
2、可变参数在函数中如何表示?关键值参数是什么?
* args 表示多个参数,只有值的可变参数
** kwargs 表示多个字典参数
关键值参数:name = value的形式
3、如何在函数中修改全局变量的值?嵌套函数中如何修改外部函数的局部变量?
global适用于函数内部修改全局变量的值
nonlocal适用于嵌套函数中内部函数修改外部变量的值
global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误。
global关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global修饰后也可以直接使用,而nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量,否则会发生错误。
4、使用函数完成1-100相加的递归函数
def num_sum(n):
if n == 1:
return 1
else:
return n + num_sum(n-1)
print (num_sum(100))
输出结果:
5050
5、编写程序,输入一⾏字符,分别统计出其中英文字母、空格、数字和其它字符的 个数。
参考:https://www.cnblogs.com/python-xkj/p/9225985.html
for i in tmpStr:
if i.isalpha():
alphaNum +=1
elif i.isnumeric():
numbers +=1
elif i.isspace():
spaceNum +=1
else:
otherNum +=1
print('字母=%d'%alphaNum)
print('数字=%d'%numbers)
print('空格=%d'%spaceNum)
print('其他=%d'%otherNum)
6、编写程序,运行后用户输入 4 位整数作为年份,判断其是否为闰年。如果年份能被 400 整除,则为闰年;如果年份能被 4 整除但不能被 100 整除也为闰年。
def leap_year(year):
if year % 400 == 0 :
print('该年为闰年')
elif year % 4 == 0 and year % 4 != 0 :
print('该年为闰年')
else:
print('该年非闰年')
while True:
year = input('请输入四位整数年份:')
if year == 'exit':
break
year = int(year)
leap_year(year)
7、编写函数,判断一个整数是否为素数,并编写主程序调用该函数。
素数(也称质数),是指除了1和该数本身,不能被任何正整数整除的正整数。判断一个正整数m是否为素数,只要判断m可否被2~根号m之中的任何一个正整数整除,如果m不能被此范围中任何一个正整数整除,m即为素数,否则m为合数。
参考:https://blog.csdn.net/langzihml/article/details/80042574
import math
m = int(input("请输入一个整数(>1):"))
k = int(math.sqrt(m))
for i in range(2, k+2):
if m % i == 0:
break #可以整除,肯定不是素数,结束循环
print(i)
if i == k+1:
print("是素数")
else:
print("是合数")
8、编写函数,写出菲波那切数列,并计算fibonaaci(10)
参考:https://www.cnblogs.com/wolfshining/p/7662453.html
from functools import reduce
def add(x,y):
return x + y
def fibonaaci(n):
lis = []
for i in range(n):
if i == 0 or i == 1: # 第1,2项 都为1
lis.append(1)
else:
lis.append(lis[i - 2] + lis[i - 1]) # 从第3项开始每项值为前两项值之和
print(lis)
sum = reduce(add, lis)
print(sum)
return sum
fibonaaci(10)
9、lambda函数转换:def func(a, b=1): return a*b
result = lambda a, b = 1: a * b
print(result(a = 4))
10、在 Python 中导入模块中的对象有哪几种方式?
11、编程实现:当前有一个a.py模块,里面定义一个start()方法,如何在同目录下b.py模块下调用start方法,请实现并验证
---------b.py------------ 方法1
import a
a.start()
---------b.py------------ 方法2
from a import start
start()
12、编程实现:如何防止from ... import * 导入模块中的“隐私”属性,编程实现 一个例例子,并验证
_xx:单前置下划线,私有化属性或方法,类对象和子类可以访问,from somemodule import *禁止导入
__xx:双前置下划线,私有化属性或方法,无法在外部直接访问(名字重整所以访问不到)
13、嵌套循环导入会发生什么?验证下面的例子
win10 + pycharm编译器内会报错:
AttributeError: module 'a' has no attribute 'run'
14、sys.path与PYTHONPATH的作用是什么?
sys.path是一个python搜索模块的路径列表,解释器由 sys.path 变量指定的路径目录搜索模块,该变量初始化时默认包含了输入脚本(或者当前目录), PYTHONPATH和安装目录。
os.environ['PYTHONPATH']
PYTHONPATH是Python中一个重要的环境变量,用于在导入模块的时候搜索路径
参考:https://www.jianshu.com/p/04701cb81e38
15、包中的__init__.py文件有什么用途
一种带有特殊_init_.py的文件的python模块的文件目录,控制着包的导入行为,用于组织包(package),方便管理各个模块之间的引用、控制着包的导入行为
参考:https://blog.csdn.net/weixin_38256474/article/details/81228492
16、import和from导入的包的区别
from 与 import 的异同:
from A import a1 是从A模块导入a1工具(可以是某个 函数,全局变量,类),程序进行的修改不会影响到被导入的原模块,且不同程序之间不会互相影响,import A是导入整个A模块的全部内容(包括全部的函数,全局变量,类),程序之间会互相影响,包括原模块。
当多个程序需要同时导入一个模块并且都是访问时,使用import 可以节省内存空间
当多个程序需要同时导入一个模块当其中一个需要修改模块,那么修改的模块的程序应该使用from来导入模块
17、包的绝对导入和相对导入
绝对导入:所有的模块import都从“根节点”开始。根节点的位置由sys.path中的路径决定,项目的根目录一般自动在sys.path中。如果希望程序能处处执行,需手动修改sys.path。
相对导入:只关心相对自己当前目录的模块位置就好。不能在包(package)的内部直接执行(会报错)。不管根节点在哪儿,包内的模块相对位置都是正确的。
参考:https://blog.csdn.net/weixin_38256474/article/details/81228492
18、编程实现:构造在不同路径下的两个模块,使用不同方法进行导入
参考:https://blog.csdn.net/weixin_38256474/article/details/81228492
19、编程实现:__main__如何是使用,其他类似:__file__
参考:https://www.cnblogs.com/jianbonet/p/8663040.html
变量__file__表示文件本身,输出的是一个相对路径(但在pycharm中会自动输出绝对路径),所以需要将其转换成绝对路径
__name__变量在脚本本身执行和在被调用执行的区别,脚本本身执行的话其输出为__main__,在被调用时执行则输出原脚本的名字,所以可以在脚本的逻辑代码前加一句判断,使得被调用是不会执行原脚本的逻辑代码,只允许调用方法。
if __name__ == '__main__':
逻辑代码